1

这适用于 Splinter 0.5.4 和 Python 2.7.5。Firefox 22.0,在运行 Mountain Lion 的 MacBook Air 上。

这是我想要做的 -

1. 登录 Gmail。

2. 单击垃圾箱链接。

3. 单击垃圾箱页面中的立即清空垃圾箱链接。

4. 在确认对话框中单击确定。

使用 Firebug / FirePath - 这个 XPath - `//div/div[3]/div[3]/div/span` 或 `//div/div[3]/div[3]/div/span[@id] ` 突出显示“立即清空垃圾箱”链接。

但是当我使用 Splinter 运行时,XPath 无法解析到该链接,(因此我在调用链接上的 click() 方法时得到一个 AttributeError)。

关于为什么 Splinter 无法解析链接的任何想法?根据我的检查,XPath似乎没问题。

很感谢任何形式的帮助。

def emptyTrash():
    browser.click_link_by_href("https://mail.google.com/mail/u/0/?shva=1#trash")
    print browser.is_element_present_by_xpath("//div/div[3]/div[3]/div/span", wait_time=5)
    deleteLink = browser.find_by_xpath("//div/div[3]/div[3]/div/span[@id]")
    print deleteLink #prints an empty list, since the above xpath is not finding the link
    deleteLink.click() #AttributeError
    trashokButton = browser.find_by_name("ok")
    trashokButton.click()
4

1 回答 1

2

我认为您的 xpath 不太正确。这对我有用:

from splinter import Browser
import time

URL = 'https://mail.google.com/mail/u/0/?shva=1#trash'

with Browser() as browser:
    browser.visit(URL)

    username = browser.find_by_id('Email')
    username.fill(...)

    password = browser.find_by_id('Passwd')
    password.fill(...)

    button = browser.find_by_id('signIn')
    button.click()

    time.sleep(5)

    browser.visit(URL)

    empty_button = browser.find_by_xpath("//div[5]/div[2]/div/div[2]/div[1]/div[2]/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div[3]/div/span")
    empty_button.click()

不过,您应该考虑简化 xpath 表达式,具有绝对路径的 xpath 太脆弱了。

希望有帮助。

于 2013-07-28T13:59:40.537 回答