我是Selenium的新手。我正在OSX上使用anaconda的Selenium 3.141。我的Chrome版本是71.0,Chromedriver版本是2.45。我的目标是使用Selenium在网页上单击带有“接受”的按钮。我可以使用可执行文件实例化webdriver对象,并使用该对象加载有问题的页面。然后,我等待20秒。这是下一个失败的地方。代码无法找到必须单击的元素。随附的是在各个级别和子级别与按钮关联的元素的两个图像,其中包含来自检查的突出显示的部分。我尝试了
之类的变体accept_button = driver.find_element_by_class_name('flex-x.static.h- center.v-center.bt-button.filled')
和
accept_button = driver.find_element_by_class_name('Accept')
和其他一些都无济于事。请帮忙。
按钮框:
接受矩形:
答案 0 :(得分:0)
您看到accept_button = driver.find_element_by_css_selector('bt-button.Accept.ng-isolate-scope.focused')
# or
accept_button = driver.find_element_by_css_selector('bt-button.Accept')
了吗,可以将其用于使用CSS选择器进行选择
def validateemail(emailaddress):
return requests.get(
"https://api.mailgun.net/v3/address/validate",
auth=("api", EMAILPUBLICVALIDATIONKEY ),
params={'address': emailaddress}
)
validation = validateemail(email)
validationtext = validation.json
答案 1 :(得分:0)
所需元素是Angular元素,因此要定位/单击,必须诱使 WebDriverWait 使元素可点击,并且您可以使用以下任一方法以下解决方案:
使用CSS_SELECTOR
:
accept_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "bt-button.Aceept.ng-isolate-scope[mutable-label='prelogin.translations.Accept']")))
使用XPATH
:
accept_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//bt-button[@class='Aceept ng-isolate-scope focused' and @mutable-label='prelogin.translations.Accept']")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 2 :(得分:0)
我建议您检查要与之交互的元素是否在iframe中。 要确定这一点,您可以:右键单击元素,如果找到“ This Frame”之类的选项,则为iframe;或者您也可以在页面源中搜索 iframe 标签以进行识别。
如果您发现元素是iframe的一部分,则可以参考此问题以寻求进一步的解决方案:Select iframe using Python + Selenium