python - 在 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 秒循环一次选项卡。但是,是不是点击了预期的搜索结果?
这里有什么问题?
解决方案
谷歌有一项功能,您可以从特定网站获取结果。所以这里的过程只是通过该功能搜索并单击找到的第一个链接:
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
推荐阅读
- java - 用少量线程处理大量传统同步/阻塞 HTTP 客户端请求 Java?
- javascript - 我试图在 JavaScript 中添加三个数字的总和,但它给了我 NaN。为什么?
- oracle - 使用 YUM 在 Ubuntu Linux 上安装 Oracle Database Express Edition (XE)
- swift - 将firebase文档字段显示到iOS tableview
- javascript - 使用 JQuery 动态添加复选框并验证它们
- flutter - 在 Flutter 的 Card 小部件中垂直对齐文本
- r - 删除具有列标题值的重复行
- python - Sympy 张量积错误结果
- java - java.lang.AssertionError:不可能引起:java.lang.NoSuchMethodException:值[]
- curl - 使用 CURL 使 https 发布请求失败