我编写了一些代码,以单击链接通过我们的大学课程网站下载课程幻灯片。 我的代码在下面:
browser = webdriver.Chrome()
def every_downloads_chrome(driver):
if not driver.current_url.startswith("chrome://downloads"):
driver.get("chrome://downloads/")
return driver.execute_script("""
var items = downloads.Manager.get().items_;
if (items.every(e => e.state === "COMPLETE"))
return items.map(e => e.file_url);
""")
try:
print("6. Detail Resource.\n")
browser.implicitly_wait(10)
url = "http://course.ucas.ac.cn/access/content/group/155852/1.%E8%AF%BE%E4%BB%B6/CourseInfo.pptx"
file = browser.find_element_by_xpath((By.XPATH, '//a[@href="'+url+'"]'))
file.click()
# waits for all the files to be completed and returns the paths
paths = WebDriverWait(browser, 120, 1).until(every_downloads_chrome)
print(paths)
except Exception as e:
print(e)
我要单击的链接的HTML代码在这里:
<a href="http://course.ucas.ac.cn/access/content/group/155852/1.%E8%AF%BE%E4%BB%B6/CourseInfo.pptx" target="_self"><img src="/library/image/sakai/ppt.gif?panel=Main" border="0" alt="PowerPoint " hspace="0">
我运行了代码,但显示了错误。
Message: invalid argument: 'value' must be a string
(Session info: chrome=74.0.3729.131)
(Driver info: chromedriver=74.0.3729.6(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.4 x86_64)
我已经搜索了chromedriver官方网站,但没有找到74.0.3729.131的chrome驱动程序。有人可以帮我解决错误吗? 预先感谢!
答案 0 :(得分:1)
代码中的问题在这里。
file = browser.find_element_by_xpath((By.XPATH, '//a[@href="' + url + '"]'))
您已经使用find_element_by_xpath
来获取定位符的字符串值。这就是为什么会出现错误的原因。
Message: invalid argument: 'value' must be a string
(Session info: chrome=74.0.3729.131)
(Driver info: chromedriver=74.0.3729.6(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.4 x86_64)
将以上代码更改为。
file = browser.find_element_by_xpath('//a[@href="'+url+'"]')
答案 1 :(得分:0)
我认为您无法通过Selenium函数“点击”下载的文档,因为Chrome下载位于ShadowRoot下,而显示为Shadow DOM
可以通过here查找here和getText() function来读取Shadow DOM的内部HTML,但是您将无法正常与元素进行交互。
假设以上所有内容,我都建议您简单地使用downloading the necessary file(s) by Python means和executing the associated application(s)或您打算对下载文件进行的任何操作