【问题标题】:Make selenium click Consecutive Elements with same class for n times使 selenium 单击具有相同类的连续元素 n 次
【发布时间】:2014-05-24 16:23:34
【问题描述】:

我有一个包含 25 家公司位于同一班级的页面。 这是该网站的链接- 这是 HTML 代码:

<section class="rslwrp">
    <section class="jbbg">..</section>
    <section class="jbbg">..</section>
    <section class="jbbg">..</section>
    <section class="jbbg">..</section>
    <section class="jbbg">..</section>
    <section class="jbbg">..</section>
    ******and so on******

我不确定,我如何让 selenium 单击一个类,然后 browser.back() 然后移动到第二个然后再次 browser.back() 然后到第三个等等。 n次。

我正在使用,

browser.find_element_by_xpath('//section[@class="jbbg"]/section[2]/section[1]/aside[1]/p[1]/span/a').click()

谁能给点建议。提前感谢您的帮助。

【问题讨论】:

    标签: python python-2.7 selenium xpath selenium-webdriver


    【解决方案1】:

    循环find_elements_by_xpath()的结果,得到所有链接和get()一一:

    links = [link.get_attribute('href') for link in browser.find_elements_by_xpath('//span[@class="jcn"]/a')]
    for link in links:
        browser.get(link)
    

    【讨论】:

    • 这可能会因staleelementreferenceexception 而失败。
    • @Richard 是的,等一下。
    • @Richard 检查一下 - 首先我们获取所有链接,然后关注它们。认为这也是一种选择。
    【解决方案2】:

    最简单的做法是使用find_elements_by_xpath,然后遍历列表:

    linksCount = len(browser.find_elements_by_xpath('//section[@class="jbbg"]/section[2]/section[1]/aside[1]/p[1]/span/a'))
    for x in range(linksCount)
        browser.find_element_by_xpath('(//section[@class="jbbg"]/section[2]/section[1]/aside[1]/p[1]/span/a)[' + x + ']')
    

    【讨论】:

    • 感谢您的帮助,但它不应该是正确的,因为它会给出“无法连接'str'和'int'对象”的错误
    【解决方案3】:

    正如之前的海报所提到的,您应该遍历它们中的每一个以进行点击。但是,在循环内部,您必须识别应用程序后退按钮或浏览器后退按钮才能返回上一页。

    但是,请注意,一旦您返回上一页,您使用 find_elements 抓取的元素可能由于 html 重新加载而无效或陈旧。因此,您可能希望在循环内再次重新定位相同的元素以使程序正常工作

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2017-03-22
      • 2016-12-06
      • 2018-10-20
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多