Selenium симулирует опускание колесика мыши и вебдрайвер. Альтернативное время. - PullRequest
1 голос
/ 21 сентября 2019

Я использую офисную систему quip

Я хочу использовать селен для экспорта всей документации. Обнаружено много проблем.

1) время ожидания, я использую только time.sleep, частоесть проблемы

2) Чтобы загрузить документ, я обнаружил много документов, которые необходимо прокрутить вниз

quip test file

Как эта папка содержит много документов,вам нужно прокрутить вниз, чтобы получить href

3) Поскольку это папка, созданная человеком, может быть новая папка в папке и другая папка в новом файле.

Яновичок, пожалуйста, расскажите мне как можно больше.

В коде указаны тестовая учетная запись и пароль.

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time

# Configuration information
email = "187069474@qq.com"
password = "Huangbo1019@"


def work_on():

    driver = webdriver.Chrome('drivers/chromedriver72.exe')
    index_url = "https://quip.com/"
    driver.get(url=index_url)

    def get_docs(docs):
        for doc in docs:
            driver.get(doc)
            time.sleep(2)
            driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[3]/div[1]/div[1]/div[1]/div[2]/button[1]').click()  # select document
            time.sleep(2)
            ele = driver.find_element_by_xpath('//div[@class="parts-menu-label" and text()="Export"]')  # Determine the position of the element
            actions = ActionChains(driver)
            actions.move_to_element(ele).perform()
            time.sleep(2)
            html = driver.find_element_by_xpath('//div[@class="parts-menu-label" and text()="HTML"]')
            actions.move_to_element(html).click(html).perform()
            time.sleep(5)

    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="header-nav-collapse"]/ul/li[9]/a').click()  # click login
    time.sleep(1)
    driver.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/form/div/input').send_keys(email)  # input email
    driver.find_element_by_xpath('//*[@id="email-submit"]').click()
    time.sleep(1)
    driver.find_element_by_xpath('/html/body/div/div/form/div/input[2]').send_keys(password)  # input password
    driver.find_element_by_xpath('/html/body/div/div/form/button').click()
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[1]/div/div/div[3]/div[1]/a[2]/div/div').click()  # click file
    time.sleep(5)
    driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[3]/div[2]/div/div/div/div[1]/div[2]/div[1]/a').click()  # select test
    time.sleep(2)
    docs = driver.find_elements_by_class_name('folder-document-thumbnail')
    docs = [x.get_attribute('href') for x in docs]
    folders = driver.find_elements_by_class_name('folder-thumbnail')
    folders = [x.get_attribute('href') for x in folders]
    get_docs(docs)
    for folder in folders:
        driver.get(folder)
        time.sleep(2)
        docs = driver.find_elements_by_class_name('folder-document-thumbnail')
        docs = [x.get_attribute('href') for x in docs]
        get_docs(docs)

    time.sleep(5)
    driver.close()


if __name__ == '__main__':
    work_on()


Текущий код может получить только папку каталога второго уровня.

Невозможно захватить все ссылки на документы, так как мышь нельзя провести пальцем вниз.

Время ожидания очень болезненное, иногда сеть работает неправильно, выдает ошибку

Предоставленный квипэто просто тесты, но тздесь будут тысячи документов в процессе производства.

Я надеюсь, кто может улучшить этот код.Это очень полезно для меня.Я искренне благодарен.


1 Ответ

0 голосов
/ 21 сентября 2019

Вы можете использовать функцию прокрутки selenium.Следующее вызывает прокрутку в нижней части страницы:

 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

Дополнительная информация на этом посте: Как прокрутить веб-страницу с помощью селена webdriver в Python?

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