让我们假设我想在谷歌上搜索“你好”这个词。然后,我想访问 Google 前 100 个页面上的每个链接,并下载该链接页面的 HTML。由于每页有 10 个结果,这意味着我必须点击大约 1,000 个链接。
这就是我使用单个进程的方式:
from selenium import webdriver
driver=webdriver.Firefox()
driver.get('http://google.com')
# do the search
search = driver.find_element_by_name('q')
search.send_keys('hello')
search.submit()
# click all the items
links_on_page = driver.find_elements_by_xpath('//li/div/h3/a')
for item in links_on_page:
item.click()
# do something on the page
driver.back()
# go to the next page
driver.find_element_by_xpath('//*[@id="pnnext"]')
这显然需要很长时间才能在 100 页上完成。我将如何分配负载,这样我可以(例如)打开三个驱动程序,每个驱动程序都会“签出”一个页面。例如:
- 驱动程序 #1 签出第 1 页。开始第 1 页。
- 驱动程序 #2 看到第 1 页已签出并转到第 2 页。开始第 2 页。
- 驱动程序#3 看到第 1 页已签出并转到第 2 页。与第 2 页相同。从第 3 页开始。
- 驱动程序 #1 完成第 1 页的工作...开始第 4 页。
我了解这将如何工作的原理,但是获得此工作的基本实现的实际代码是什么?