Python 2.7:使用selenium下载PDFS

时间:2018-02-20 18:39:22

标签: python selenium webdriver

我正在尝试点击网页上的某些链接,使用selenium自动下载PDF文件。我的问题是,我想点击3个名称相同的不同链接:“圈时间”。我已尝试在(lambda (v r) r)中使用他们的xpath,但下载不会发生。

如果我使用find_element_by_xpath,则只会点击名为“Lap Times”的最后一个链接。

以下是网页:https://www.fia.com/events/fia-formula-one-world-championship/season-2016/event-timing-information-5

这是我的代码:

find_element_by_text("Lap Times")

点击“第三次练习”标题下方的“圈时间”链接下载FP3 Lap Times PDF文件

years = ["2016", "2017"]
races = []

for year in years:
    for i in range(20):
        page = "https://www.fia.com/events/fia-formula-one-world-championship/season-" + year + "/event-timing-information-" + str(i)
        races.append(page)


def download_pdfs(races, xpath):

    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain,application/octet-stream,application/pdf,application/x-pdf,application/vnd.pdf")
    profile.set_preference("browser.download.manager.showWhenStarting",False)
    profile.set_preference("browser.helperApps.neverAsk.openFile","text/plain,application/octet-stream,application/pdf,application/x-pdf,application/vnd.pdf")
    profile.set_preference("browser.helperApps.alwaysAsk.force", False)
    profile.set_preference("browser.download.manager.useWindow", False)
    profile.set_preference("browser.download.manager.focusWhenStarting", False)
    profile.set_preference("browser.helperApps.neverAsk.openFile", "");
    profile.set_preference("browser.download.manager.alertOnEXEOpen", False);
    profile.set_preference("browser.download.manager.showAlertOnComplete", False);
    profile.set_preference("browser.download.manager.closeWhenDone", True);
    profile.set_preference("pdfjs.disabled", True);
    browser = webdriver.Firefox(profile)

    for race in races:
        browser.get(race)
        try:
            browser.find_element_by_xpath(xpath).click()
        except:
            "cannot download pdf:" + str(race)

1 个答案:

答案 0 :(得分:0)

而不是传入XPath,请尝试专门使用:

browser.find_elements_by_xpath("//a[contains(text(), 'Lap Times')]")[1].click()

注意这里的find by方法的复数版本;我们要求所有带有“Lap Times”文本的链接,然后选择列表中的第二个(这是第三个练习)点击。

我还建议您不要使用打开的“除外”。要么指定一个异常,比如TimeoutException,要么根本不使用try / except块。您错过了报告问题的详细信息。