【问题标题】:How to find element using Selenium and Chromedriver如何使用 Selenium 和 Chromedriver 查找元素
【发布时间】:2019-05-25 22:49:25
【问题描述】:

我是 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')

和其他一些无济于事。请帮忙。

按钮框架:

接受矩形:

【问题讨论】:

  • 是在框架下吗?
  • @cruisepandey 我怎么知道?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

所需元素是 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
    

【讨论】:

  • 我都试过了,我从 wait.py 得到一个超时异常
  • @Titanical TimeoutExceptionfailed expected-conditions 的结果。通过find_element_by_*time.sleep() 一起调试您的代码。如果您能够找到该元素,请使用观察结果更新问题。
  • 我使用 CSS_SELECTOR 从您的建议中取出了“专注”,它起作用了。 “focussed”限定词似乎是动态的,当我单击一个框时会添加它。
【解决方案2】:

我建议您检查您尝试与之交互的元素是否在 iframe 中。 要识别这一点,您可以: 右键单击​​元素,如果找到类似“This Frame”的选项,则它是 iframe;或者你可以在页面源代码中搜索 iframe 标签来识别。

如果您的元素是 iframe 的一部分,您可以参考此问题以获得进一步的解决方案:Select iframe using Python + Selenium

【讨论】:

    【解决方案3】:

    你看到 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')
    

    【讨论】:

    • 我都试过了,我得到“selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: ....”
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多