如何使用 Selenium 和 Chromedriver 查找元素
How to find element using Selenium and Chromedriver
我是 Selenium 的新手。我在 OSX 上使用来自 anaconda 的 Selenium 3.141。我的Chrome版本是71.0,Chrome驱动版本是2.45。我的目标是使用 Selenium 单击网页上带有 "Accept" 的按钮。我能够使用可执行文件实例化 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')
和其他一些无济于事。请帮忙。
按钮框架:
接受矩形:
你看到了吗bt-button.Accept.ng-isolate-scope.focused
你可以用它来选择css选择器
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')
所需元素是 Angular 元素,因此要 locate/click 您必须引入 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
我建议您检查您尝试与之交互的元素是否在 iframe 中。
要识别这一点,您可以: 右键单击该元素,如果找到 'This Frame' 之类的选项,则它是一个 iframe;或者您可以在页面源代码中搜索 iframe 标记来识别。
如果发现您的元素是 iframe 的一部分,您可以参考此问题以获得进一步的解决方案:Select iframe using Python + Selenium
我是 Selenium 的新手。我在 OSX 上使用来自 anaconda 的 Selenium 3.141。我的Chrome版本是71.0,Chrome驱动版本是2.45。我的目标是使用 Selenium 单击网页上带有 "Accept" 的按钮。我能够使用可执行文件实例化 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')
和其他一些无济于事。请帮忙。
按钮框架:
接受矩形:
你看到了吗bt-button.Accept.ng-isolate-scope.focused
你可以用它来选择css选择器
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')
所需元素是 Angular 元素,因此要 locate/click 您必须引入 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
我建议您检查您尝试与之交互的元素是否在 iframe 中。 要识别这一点,您可以: 右键单击该元素,如果找到 'This Frame' 之类的选项,则它是一个 iframe;或者您可以在页面源代码中搜索 iframe 标记来识别。
如果发现您的元素是 iframe 的一部分,您可以参考此问题以获得进一步的解决方案:Select iframe using Python + Selenium