Python: использование Selenium для нескольких URL без выхода из драйвера - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь использовать Selenium для очистки нескольких URL-адресов.Вот часть кода:

driver = webdriver.Chrome()
url = 'first URL'
driver.execute_script('''window.open("'''+str(url)+'''","_blank");''')
driver.switch_to_window(driver.window_handles[1])
time.sleep(3)
doc1 = html.fromstring(driver.page_source)

url = 'second URL'
driver.execute_script('''window.open("'''+str(url)+'''","_blank");''')
driver.switch_to_window(driver.window_handles[1])
time.sleep(3)
doc2 = html.fromstring(driver.page_source)

Но я вижу, что doc1 и doc2 одинаковы.Любая идея, почему это происходит?

Я думаю, один из способов сделать driver.quit() после получения doc1, а затем сделать все снова для second URL.Но я не хочу выходить из хрома.Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

В вашем первом driver.execute_script() он запустит браузер с окном по умолчанию, а затем перейдет к указанному URL-адресу в другом окне, так что у вас будет всего 2 окна, и вы делаете driver.switch_to_window(), чтобы переключиться на второеокно, и это нормально.

Когда дело доходит до второго driver.execute_script(), у вас будет два предыдущих окна вместе с новым, так что всего у вас будет 3 окна.Если вы выполните driver.window_handles[1] снова, вы получите тот же источник страницы, поэтому, чтобы избежать этого, вам нужно изменить индексный номер на 2.

Попробуйте следующий код:

driver = webdriver.Chrome()
url = 'first URL'
driver.execute_script('''window.open("'''+str(url)+'''","_blank");''')
driver.switch_to_window(driver.window_handles[1])
time.sleep(3)
doc1 = html.fromstring(driver.page_source)

url = 'second URL'
driver.execute_script('''window.open("'''+str(url)+'''","_blank");''')
driver.switch_to_window(driver.window_handles[2])
time.sleep(3)
doc2 = html.fromstring(driver.page_source)

Чтобы узнать больше о работе с JavaScriptExecutor, обратитесь к Эта ссылка

Надеюсь, это поможет ...

0 голосов
/ 02 марта 2019

Если вы поместите все URL-адреса в список или кортеж (например, «myURLs»), вы можете использовать следующий подход:

from selenium import webdriver
myURLs = ["https://google.com", "https://bing.com", "https://duckduckgo.com"]
driver = [None] * len(myURLs)
# for info on enumerate(), see link below
for i, item in enumerate(myURLs):
    driver[i] = webdriver.Chrome()
    driver[i].get(item)

7 PEP 279: enumerate ()

0 голосов
/ 02 марта 2019

Используйте "driver.get("url")" вместо driver.execute_script('''window.open("'''+str(url)+'''","_blank");''')

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