Selenium Chrome驱动程序74.0.3729.6问题

时间:2019-05-06 15:15:06

标签: python-3.x selenium selenium-chromedriver

我编写了一些代码,以单击链接通过我们的大学课程网站下载课程幻灯片。 我的代码在下面:

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驱动程序。有人可以帮我解决错误吗? 预先感谢!

2 个答案:

答案 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

enter image description here

可以通过here查找heregetText() function来读取Shadow DOM的内部HTML,但是您将无法正常与元素进行交互。

假设以上所有内容,我都建议您简单地使用downloading the necessary file(s) by Python meansexecuting the associated application(s)或您打算对下载文件进行的任何操作