首页 > 解决方案 > 在 google 中反复搜索书名,然后单击来自 amazon.com 的链接

问题描述

我正在使用以下脚本

from selenium import webdriver
import time
import urllib.parse

browser = webdriver.Chrome()

with open("google-search-terms.adoc") as fin:
    for line_no, line in enumerate(fin):
        line = line.strip()
        query = urllib.parse.urlencode({'q': line})
        browser.execute_script(
            f"window.open('https://www.google.com/search?{query}');")

for x in range(len(browser.window_handles)):
    browser.switch_to.window(browser.window_handles[x])
    time.sleep(3)
    try:
        browser.find_elements_by_xpath(
            "//*[@id='rso']/div/div/div/a/div/cite[contains(text(),'amazon')]").click()
    except:
        pass

输入文件google-search-terms.adoc包含:

The Effective Executive by Peter Drucker
The Functions of the Executive

它打开多个选项卡,其中包含来自输​​入文件的文本的搜索结果。它每 3 秒循环一次选项卡。但是,是不是点击了预期的搜索结果?

这里有什么问题?

标签: pythonpython-3.xselenium

解决方案


谷歌有一项功能,您可以从特定网站获取结果。所以这里的过程只是通过该功能搜索并单击找到的第一个链接:

from selenium import webdriver
import time
import urllib.parse

browser = webdriver.Chrome()

with open("google-search-terms.adoc") as fin:
    for line_no, line in enumerate(fin):
        line = line.strip()
        query = urllib.parse.urlencode({'q': line + " site:amazon.com"})
        browser.execute_script(
            f"window.open('https://www.google.com/search?{query}');")

for x in range(len(browser.window_handles)):
    browser.switch_to.window(browser.window_handles[x])
    time.sleep(2)
    try:
        result = browser.find_elements_by_xpath('//div[@id="rso"]/div/div')[0] 
        result.find_element_by_xpath("./div/a").click()
    except:
        continue

推荐阅读