Selenium Chrome Driver 74.0.3729.6 Проблема - PullRequest
1 голос
/ 06 мая 2019

Я написал код, чтобы щелкнуть ссылку, чтобы загрузить слайды курса через наш веб-сайт университетского курса.Мой код ниже:

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, но не нашел драйвер chrome для 74.0.3729.131.Может ли кто-нибудь помочь мне исправить ошибку?Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Проблема в вашем коде здесь.

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+'"]')
0 голосов
/ 06 мая 2019

Я не думаю, что вы сможете "щелкнуть" по загруженному документу с помощью функций Selenium, поскольку загрузка Chrome находится под ShadowRoot , чтобы они отображались как Shadow DOM

enter image description here

Поиск здесь и здесь чтение внутреннего HTML-кода Shadow DOM возможно с помощью функции getText () , однако вы не сможете взаимодействовать с элементы нормально.

Исходя из всего вышесказанного, я бы порекомендовал просто загрузить необходимый файл (ы) с помощью Python, значит и , запустив соответствующее приложение (я) или что вы собираетесь делать с загруженным файл (ы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...