【问题标题】:Python Selenium button clickPython Selenium 按钮单击
【发布时间】:2016-11-29 16:21:46
【问题描述】:

我正在尝试单击一个按钮以在 http://disqus.com/ 的讨论线程上显示更多 cmets

HTML 如下所示:

<div class="load-more" data-role="more" style=""> <a href="#" data-action="more-posts" class="btn load-more__button">Show more</a> </div>

我尝试使用按钮中的 xPath,如下所示:

driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
driver.get(url)
driver.find_element_by_xpath('''//*[@id="posts"]/div[3]/a''').click()

但是我得到了 NoSuchElement 异常。

单击具有那种 HTML 类型的按钮的正确方法是什么?

更新:当我切换到特定的 iFrame 时工作:

 driver.switch_to.frame('myID')

然后按类名加载:

element = driver.find_element_by_class_name('load-more') element.click()

注意:click() 在像driver.find_element_by_class_name('load-more').click() 这样的同一行上执行时不起作用

【问题讨论】:

  • 正确的是//a[text()="Show more"],但是这个链接可能在iframe里面,所以只能在driver.switch_to_frame(iframe_id)之后处理
  • 您可能需要使用element_to_be_clickable等待元素可点击
  • 有时使用 Selenium 尝试几种不同的选择元素的方法是值得的。有些页面使用一种方法比另一种更好。你试过find_elements_by_class_name("btn load-more__button") 吗?

标签: python selenium web-crawler


【解决方案1】:

Xpath 应该是查找元素的最后手段。对于你的情况,我会尝试

driver.find_element_by_class_name("load-more__button"));

使用 btn load-more__button 将不起作用,因为复合类名无效。

如果还是不行,我建议在 Xpath 之前使用 css 选择器。

但是,如果这些选项都不起作用,并且您的 Xpath 仍然无法正常工作,您应该使用 Firefox 的 firebug 插件来确保您使用的 Xpath 是正确的。

以下是我的一些其他答案,可以帮助您开始使用 Firebug:

https://stackoverflow.com/a/38980488/3537915

https://stackoverflow.com/a/38723782/3537915

https://stackoverflow.com/a/38744577/3537915

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 2020-07-28
    • 1970-01-01
    • 2019-03-17
    • 2021-01-31
    • 2020-07-30
    • 2021-03-31
    • 2020-08-06
    • 2021-08-27
    相关资源
    最近更新 更多