代码之家  ›  专栏  ›  技术社区  ›  TJ1

python:对多个url使用selenimum而不退出驱动程序

  •  0
  • TJ1  · 技术社区  · 5 年前

    我试图使用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 . 但我不想退出Chrome。这可能吗?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Pritam Maske    5 年前

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

        2
  •  1
  •   Ali    5 年前

    在你的第一个 driver.execute_script() ,它将使用默认窗口启动浏览器,然后在另一个窗口中导航到提供的URL,这样总共有两个窗口 driver.switch_to_window() 换到第二个窗口就可以了。

    说到第二个 驱动程序。执行脚本() ,您将有两个以前的窗口和一个新窗口,因此总共有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

    我希望它能帮助…

        3
  •  0
  •   SanV    5 年前

    如果将所有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()