【问题标题】:Need to click on an xpath using selenium webdriver with python需要在 python 中使用 selenium webdriver 单击 xpath
【发布时间】:2012-12-21 04:32:55
【问题描述】:

我创建了一个与 xpath 匹配的元素列表,并希望依次单击每个元素。但是,如果我使用 get_attribute("href") 命令,我会收到 'unicode' object has no attribute 'click' 错误。这是因为 href 是一个字符串。如果我不使用 get_attribute 并简单地使用这个命令:

driver.find_elements_by_xpath(".//div/div/div[3]/table//tr[12]/td/table//tr/td/a")

我得到一个充满元素的列表。我可以成功点击列表中的第一个链接;但是,当我单击第二个时,出现此错误: 'Element not 在缓存中找到 - 也许页面在查找后发生了变化' 我想我试图遍历的页面链接的原因是通过对 java 的搜索查询生成的(这是 href 链接之一:

javascript:__doPostBack('ctl00$Content$listJobsByAll1$GridView2','Page$3') )

还有一条相关信息:这个 xpath 位置只有两个属性:href 和 text。

所以,鉴于我正在处理一个 java 网站并且只有两个属性,我希望有人能告诉我可以使用哪些 webdriver 命令来获取一系列可点击的静态链接。除了一个具体的答案之外,任何关于我自己如何解决这个问题的建议都会有所帮助。

【问题讨论】:

    标签: python selenium click webdriver element


    【解决方案1】:

    如果您单击带有selenium 的链接,您将更改当前页面。您被定向到的页面没有下一个元素。

    获取链接使用:

    './/tag/@href'
    

    你可以试试:

    for elem in elems:
        elem.click()
        print browser.current_url
        browser.back()
    

    【讨论】:

    • 谢谢。我不知道为什么我没有尝试过 - 没有理由为什么它不起作用。我回家后会试一试。
    • 所以当我回去时元素仍然不同,因此我必须 1)计算元素,然后 2)遍历元素列表的范围,每次都实例化列表,因为点击第 i 个元素。
    • for i in driver.find_elements_by_xpath(".//div/div/div[3]/table//tr[12]/td/table//tr/td/a"): 列表.append(i) count = len(list)-1 print count for i in range(count): print i target = driver.find_elements_by_xpath(".//div/div/div[3]/table//tr[12 ]/td/table//tr/td/a") 打印目标target[i].click() time.sleep(5) driver.back() time.sleep(5)
    • @user1780852,如果答案是正确的并且对你有帮助,那么你应该接受它。
    猜你喜欢
    • 2013-01-13
    • 2017-08-31
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2012-08-21
    • 2017-01-17
    相关资源
    最近更新 更多