Python:将Selenium用于多个URL而不退出驱动程序

时间:2019-03-02 17:10:32

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

我正在尝试使用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 :(得分:1)

使用“ driver.get("url") ” 代替driver.execute_script('''window.open("'''+str(url)+'''","_blank");''')

答案 1 :(得分:1)

在您的第一个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的更多信息,请参阅This Link

希望对您有帮助...

答案 2 :(得分:0)

如果将所有URL放在列表或元组中(例如“ myURL”),则可以使用以下方法:

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()