Google使用硒搜索下一页

时间:2018-10-18 14:19:08

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

在必须进入第一和第二搜索页面中的链接之后,我正在尝试自动在Google搜索中点击下一页。

到目前为止,我已经能够执行以下操作:

  1. 启动Chrome浏览器
  2. 转到Google网页
  3. 输入搜索词
  4. 点击搜索图标
  5. 进入第一和第二Google页面上的链接

请参见下面的代码:

from time import sleep
from selenium import webdriver
from parsel import Selector
from selenium.webdriver.common.keys import Keys

#path to the chromedriver
driver = webdriver.Chrome('/Users\my_path/chromedriver')

driver.get('https://www.gooogle.com')

#locate search form by name
search_query = driver.find_element_by_name('q')

#Input search words
search_query.send_keys('X-Men')

#Simulate return key
search_query.send_keys(Keys.RETURN)

Xmen_urls = driver.find_elements_by_class_name('iUh30')

for page in range(0,3):
    Xmen_urls = [url.text for url in Xmen_urls]

    #loop to iterate through all links in the google search query
    for Xmen_url in Xmen_urls:
         driver.get(Xmen_url)
         sel = Selector(text = driver.page_source)

    #Go back to google search
    driver.get('https://www.gooogle.com') 

    #locate search form by name
    search_query = driver.find_element_by_name('q')

    #Input search words
    search_query.send_keys('X-Men')

    #Simulate return key
    search_query.send_keys(Keys.RETURN)

    #find next page icon in Google search
    Next_Google_page = driver.find_element_by_link_text("Next").click()

    page += 1

当我收集完“第二个”搜索页面上的链接后,如何告诉算法从“第二个”搜索页面而不是第一个搜索页面开始(这将使我进入> 2个页面)。

我知道这是一个“ for循环”,语法重新排列,我在某个地方不见了,但是此时我的大脑被冻结了。

我看到了以下页面:How to click the next link in google search results?,但只有在我不离开Goog​​le搜索页面的情况下,它才有帮助

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我可以通过两种方式查看:

使用window_handles在单独的窗口中打开每个X战警网址,收集page_source,关闭窗口并切换回原始窗口。

driver.execute_script("window.open(X-Men_url, 'new_window')")
driver.switch_to.window(driver.window_handles[1])
sel = Selector(text = driver.page_source)
driver.close()
driver.switch_to.window(driver.window_handles[0])

上面的代码可能无法完全正常运行,但可以起到一定作用。

另一种方法是使用循环来模拟FOR循环开始时在NEXT上的点击次数:

a = 0;
while a <= page:
    driver.find_element_by_xpath("//*[contains(local-name(), 'span') and contains(text(), 'Next')]").click()
    a = a+1