搜索栏一次性输入了data的数据,我该怎么去执行一个个输入数据然后反复进行后续操作呢(语言-python)

在搜索栏里面一次性输出了data的值,我需要是一个一个值进行操作

import re
import time
import requests
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import csv


with open('a.csv', 'r') as file:
    reader = csv.reader(file)
    data = list(reader)
driver = webdriver.Firefox()
driver.get('https://www.tianyancha.com/')
driver.find_element(By.CSS_SELECTOR,'.treasure_nav-link__7ErdH').click()
sleep(3)
for row in data:
    driver.find_element(By.CSS_SELECTOR,"input._7c380").send_keys(row)
driver.find_element(By.CSS_SELECTOR,".index_home-suggest-button__GuWyT > span").click()
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0',
    'Referer': 'https://www.tianyancha.com/',
    'Cookie': 'jsid=SEO-BAIDU-ALL-SY-000001; TYCID=83b03e70d99a11edaff321a5cbfd05e4; '
              'sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22285668898%22%2C%22first_id%22%3A'
              '%22187783a76c9a-0ca1d139855f728-d575429-2073600-187783a76ca66c%22%2C%22props%22%3A%7B%22'
              '%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22'
              '%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22'
              '%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Flink%22%7D%2C%22identities%22%3A%2'
              '…4576; tyc-user-info-save-time=1683278954496; bannerFlag=true; HWWAFSESID=192202628114f7efe79; '
              'HWWAFSESTIME=1683276657901; csrfToken=ktIfQ-X_48aoMG7hj6jkWsbh; '
              'Hm_lpvt_e92c8d65d92d534b0fc290df538b4758=1683276673; '
              'tyc-user-info=%7B%22state%22%3A%220%22%2C%22vipManager%22%3A%220%22%2C%22mobile%22%3A'
              '%2218273703032%22%7D; '
              'auth_token=eyJhbGciOiJIUzUxMiJ9'
              '.eyJzdWIiOiIxODI3MzcwMzAzMiIsImlhdCI6MTY4MzI3ODk2NywiZXhwIjoxNjg1ODcwOTY3fQ'
              '.GcKezvllS_vl1UzhXXZK_4JgqYiFklGkmsZIRv0dg2OZee1oo2H-BSe0LcM16Gju1wfKBoQUMJUNQN4HCvZnWA '
}
try:
    company= driver.find_element(By.CSS_SELECTOR,'.index_alink__zcia5 > span:nth-child(1)').text
    name = driver.find_element(By.CSS_SELECTOR,'div.index_info-col__UVcZb:nth-child(1) > a:nth-child(1)').text
    tel = driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div/div[2]/section/main/div[2]/div[2]/div/div/div[2]/div[2]/div[4]/div[1]/span[2]/span').text
    address= driver.find_element(By.CSS_SELECTOR,'div.index_contact-row__iYUn6:nth-child(5) > div:nth-child(1) > span:nth-child(2)').text
    print(company, name, tel, address)

except NoSuchElementException:
    pass







#代码无报错,问题是该代码一次性把data里面的数据全部输入了,我需要一个一个去执行

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您可以使用循环,逐个输入data中的值并进行后续操作。以下是修改后的代码示例:

import re
import time
import requests
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import csv

with open('a.csv', 'r') as file:
    reader = csv.reader(file)
    data = list(reader)

driver = webdriver.Firefox()
driver.get('https://www.tianyancha.com/')
driver.find_element(By.CSS_SELECTOR,'.treasure_nav-link__7ErdH').click()
sleep(3)

for row in data:
    driver.find_element(By.CSS_SELECTOR,"input._7c380").clear() # 清空输入框内容
    driver.find_element(By.CSS_SELECTOR,"input._7c380").send_keys(row) # 输入当前行的值
    driver.find_element(By.CSS_SELECTOR,".index_home-suggest-button__GuWyT > span").click()
    headers = {
        # headers省略
    }
    try:
        company= driver.find_element(By.CSS_SELECTOR,'.index_alink__zcia5 > span:nth-child(1)').text
        name = driver.find_element(By.CSS_SELECTOR,'div.index_info-col__UVcZb:nth-child(1) > a:nth-child(1)').text
        tel = driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div/div[2]/section/main/div[2]/div[2]/div/div/div[2]/div[2]/div[4]/div[1]/span[2]/span').text
        address= driver.find_element(By.CSS_SELECTOR,'div.index_contact-row__iYUn6:nth-child(5) > div:nth-child(1) > span:nth-child(2)').text
        print(company, name, tel, address)

    except NoSuchElementException:
        pass

driver.quit() # 记得关闭浏览器

在修改后的代码中,我们使用了一个for循环来逐个输入data中的值。每次循环开始前,我们先清空输入框中的内容,然后将当前行的值输入到输入框中。接着进行后续操作,等待结果并输出。处理完当前行后,循环开始下一行的处理,直到处理完data中的所有数据。最后,我们记得关闭浏览器。

希望这个修改后的代码能够对您有所帮助!


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7661897
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python读取data文件并输出
  • 除此之外, 这篇博客: 怎么用python实现一个单链表中的 从头结点开始获取结点中的data值, 打印出来即可 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •     # 打印链表
        def print_list(self):
            print('Linked List:')
            temp = self.head
            while temp is not None:
                print(temp.data)
                temp = temp.next
    
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以给出以下解决方案,分以下两部分:

    第一部分,从一个字符串列表中逐一取出元素进行操作:

    1. 定义一个字符串列表,如['foo', 'bar', 'baz']
    2. 使用for循环遍历这个列表,对于每个元素,进行需要的操作即可。

    示例代码:

    lst = ['foo', 'bar', 'baz'] for item in lst: # 对每个元素进行操作 print(item) # 示例操作:打印元素

    第二部分,使用Python实现键盘和鼠标操作:

    1. 导入win32api、win32con、win32gui等相关库。
    2. 定义需要的操作函数,如key、ctrlA、ctrlC、setPaste等,关键在于理解win32api库中对应的键值。
    3. 调用相关函数进行键盘、鼠标操作即可。

    示例代码:

    import win32api import win32con import win32gui import time import xlrd import xlwt import win32clipboard

    def key(key): win32api.keybd_event(key, 0, 0, 0) # 按下键 time.sleep(0.02) win32api.keybd_event(key, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开键

    def ctrlA(): win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0) # 按下Ctrl键 win32api.keybd_event(ord('A'), 0, 0, 0) # 按下A键 win32api.keybd_event(ord('A'), 0, win32con.KEYEVENTF_KEYUP, 0) # 松开A键 win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开Ctrl键

    def ctrlC(): win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0) # 按下Ctrl键 win32api.keybd_event(ord('C'), 0, 0, 0) # 按下C键 win32api.keybd_event(ord('C'), 0, win32con.KEYEVENTF_KEYUP, 0) # 松开C键 win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开Ctrl键

    def setPaste(paste): win32clipboard.OpenClipboard() # 打开剪贴板 win32clipboard.EmptyClipboard() # 清空剪贴板 win32clipboard.SetClipboardText(paste) # 将数据写入剪贴板 win32clipboard.CloseClipboard() # 关闭剪贴板

    def getPaste(): win32clipboard.OpenClipboard() # 打开剪贴板 data = win32clipboard.GetClipboardData() # 获取剪贴板中的数据 win32clipboard.CloseClipboard() # 关闭剪贴板 return data

    TODO:完善并调用相关操作函数来实现需求

    注意:其中的win32api库是Windows专用的,该解决方案只在Windows平台下有效。