【问题标题】:What is the cleanest way to have selenium read through multiple search terms from a text file in Python?让 selenium 从 Python 中的文本文件中读取多个搜索词的最简洁方法是什么?
【发布时间】:2022-01-24 16:06:46
【问题描述】:

我有一个这样的文本文件:

Search Term 1
Search Term 2
Search Term 3
...

到目前为止,我已经编写了一个脚本,它获取文本文件的第一行并成功搜索它:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path="/Users/p1/Environments/p1_env/chromedriver")
driver.implicitly_wait(0.5)
driver.get("https://www.google.com/")
m = driver.find_element_by_name("q")
with open('test.txt') as f:
    for line in f:
        m.clear()
        m.send_keys(line)
        time.sleep(0.1)  
        m.send_keys(Keys.ENTER)
driver.quit

让脚本在我的文本文件中的整个列表中运行的最简洁的方式是什么?

我的最终目标是让 selenium 搜索每个术语,然后输出是否存在特定的搜索结果。这个问题只是一个谜题。

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    如果我正确理解您的要求,答案是:
    您不需要为每个搜索字符串迭代 driver.get("https://www.google.com/")。您只需打开一次谷歌,然后清除之前的搜索字符串,插入一个新的搜索字符串并获得新的搜索结果。
    像这样的:

    driver.get("https://www.google.com/")
    m = driver.find_element_by_name("q")
    
    with open(filename) as file:
        for line in file:
            m.clear()
            m.send_keys(line)
            time.sleep(0.1)  
            m.send_keys(Keys.ENTER)
            time.sleep(5)
            #read the search results etc...
    

    【讨论】:

    • 不完全。我希望脚本从文本文档中搜索每个搜索词。目前该脚本只对 Search Term 1 执行一次搜索。我觉得我需要使用 range(i)?
    • 如果您的文本文件将包含for line in file: 的每行一个搜索词,您将在每次迭代中一一获取搜索词。正如我所写的
    • 我很抱歉,因为我对 Python 有非常基本的经验。我将解释我的意思是程序格式 1. 读取 txt 文件 2. 在 Google 中搜索 txt 文件中的每一行 -- 目前在线脚本读取第一行并搜索它。如何为下面的其他行重复此任务?
    • 好的,这就是我在这里要做的。我正在阅读文本文件,并且每次迭代,即每个文本文件内容的每个文本行,我都在执行从文件中接受的文本的搜索,即搜索词。我不明白这里有什么问题?
    • 我也不确定。当我运行您的编辑时,我仍然只搜索第一个搜索词,而不是所有搜索词。我确实看到了两个相同的错误 - DeprecationWarning: find_element_by_* commands are deprecated。请改用 find_element()
    猜你喜欢
    • 2010-09-07
    • 2011-08-17
    • 2021-04-24
    • 2017-03-10
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    相关资源
    最近更新 更多