Откройте 2 Webdrivers одновременно с многопоточностью - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю над проектом Crawl, используя Selenium и Webdriver. Поскольку эти данные мне нужно сканировать, когда они большие, я хочу разделить их на 2 threads и запустить одновременно. Но когда я запускаю 2 Webdrivers одновременно, мой код не может распознать, какие driver принадлежат, а какие thread заполняют информацию.

  1. Это код, который я установил 2 threads run main function:
if __name__ == '__main__':
    data = load_data(INPUT_DIR)

    t1_data = data[:250]
    t2_data = data[250:]

    try:
        _thread.start_new_thread(main, (t1_data, LOG_FILE_T1))
        _thread.start_new_thread(main, (t2_data, LOG_FILE_T2))
    except:
        print ("Error: unable to start thread")

    while 1:
        pass 
Этот код я запускаю Webdriver:
def start_driver():

    global driver

    options = Options()
    options.add_argument("--disable-notification")
    options.add_argument("--disable-infobars")
    options.add_argument("--mute-audio")
    #options.add_argument("headless")

    driver = webdriver.Chrome(options=options)
Два Webdrivers после запуска, я введу имя пользователя / пароль на facebook.com
def login(email, password):
    """ Logging into our own profile """

    try:
        driver.get('https://mbasic.facebook.com')
        time.sleep(DELAY_TIME)

        driver.find_element_by_name('email').send_keys(email)
        driver.find_element_by_name('pass').send_keys(password)
        driver.find_element_by_name('login').click()

        # deal with "Not Now" button if it show off at first time
        not_now_button = driver.find_element_by_xpath("//a")
        if not_now_button.size != 0:
            not_now_button.click()

    except Exception as e:
        print('Error in Login')
        print(e)
        exit()

На шаге send_keys оба threads заполняют один и тот же текст коробка в 1 Webdriver. Как я могу изменить свой код для 2 threads, видеть другие Webdrive и заполнять информацию?

1 Ответ

0 голосов
/ 04 апреля 2020

Только что нашел решение, хочу поделиться здесь, если кому-то нужно.

Вместо global driver я изменю на местный driver и передам его каждому function.

def start_driver():

    options = Options()
    options.add_argument("--disable-notification")
    options.add_argument("--disable-infobars")
    options.add_argument("--mute-audio")
    #options.add_argument("headless")

    driver = webdriver.Chrome(options=options)
    return driver
def login(driver, email, password):
    """ Logging into our own profile """

    try:
        driver.get('https://mbasic.facebook.com')
        time.sleep(DELAY_TIME)

        driver.find_element_by_name('email').send_keys(email)
        driver.find_element_by_name('pass').send_keys(password)
        driver.find_element_by_name('login').click()

        # deal with "Not Now" button if it show off at first time
        not_now_button = driver.find_element_by_xpath("//a")
        if not_now_button.size != 0:
            not_now_button.click()

    except Exception as e:
        print('Error in Login')
        print(e)
        exit()

. Таким образом, 2 threads может смотрите разные Webdriver и заполняйте собственную информацию.

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