我正在尝试使用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
做所有事情。但是我不想放弃这个想法。这可能吗?
答案 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)