python - Selenium Python get_element by ID 失败
问题描述
有人可以帮我理解为什么我的代码无法通过 ID 找到元素。下面的代码:
from selenium import webdriver
driver=webdriver.Firefox()
driver.get('https://app.waitwhile.com/checkin/lltest3/user')
element = driver.find_element_by_id("guestPhone")
检查元素清楚地显示 ID。
<input type="tel" name="guestPhone" id="guestPhone" class="form-control ng-pristine ng-empty ng-invalid ng-invalid-phone-validator ng-invalid-required ng-touched" ng-model="form.model" ng-model-options="{ 'updateOn': 'default blur', 'debounce': { 'default': 350, 'blur': 0 } }" uib-typeahead="guest.phone for guest in form.onChange({value:$viewValue})" typeahead-min-length="6" typeahead-on-select="form.onSelect({guest:$item})" typeahead-select-on-exact="true" uib-tooltip="Please enter valid number. Include country code for non-US numbers" tooltip-trigger="'none'" tooltip-is-open="(form.guestForm.$submitted || form.guestForm.guestPhone.$touched) && form.guestForm.guestPhone.$invalid" tooltip-placement="bottom" ng-required="::form.required" phone-validator="US" placeholder="Mobile phone" title="Please enter a valid phone number" autocomplete="nope" next-on-enter="" aria-autocomplete="list" aria-expanded="false" aria-owns="typeahead-47-2884" required="required" style="">
PS 我也尝试过 XPath 和名称。仍然没有运气。
解决方案
您需要等待元素在页面上可见。您可以知道这是动态加载的,因为如果您右键单击 chrome 中的页面并查看源代码,您将看到没有 guestPhone 元素。它使用 javascript 加载
这是来自http://isaacviel.name/make-web-driver-wait-element-become-visiable/的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
推荐阅读
- sql - 将记录链接到其他人
- c# - 如何用星号打印星号图案
- ios - 如何在点击的光线触摸而不是来自中心视图的光线处生成 Reality Composer 场景
- apache - 确定原因并修复 302 重定向
- word2vec - 为什么“[UNK]”这个词在 word2vec 词汇表中排在第一位?
- typescript - 打字稿(tsc)显示编译时间
- reactjs - 如何在反应多轮播中居中图像?
- reactjs - 类型错误:Object(...) 不是函数 React js
- python-3.x - 在 Spyder (Python 3.8) 中使用环境时出错
- python - __getattr__ 用于类属性?