我正在尝试点击网页上的某些链接,使用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)
答案 0 :(得分:0)
而不是传入XPath,请尝试专门使用:
browser.find_elements_by_xpath("//a[contains(text(), 'Lap Times')]")[1].click()
注意这里的find by方法的复数版本;我们要求所有带有“Lap Times”文本的链接,然后选择列表中的第二个(这是第三个练习)点击。
我还建议您不要使用打开的“除外”。要么指定一个异常,比如TimeoutException,要么根本不使用try / except块。您错过了报告问题的详细信息。