【问题标题】:how to loop through all the entries in excel sheet in selenium python如何在selenium python中遍历excel工作表中的所有条目
【发布时间】:2022-01-19 08:39:58
【问题描述】:

所以我使用 selenium 进行网络自动化。我有一个包含我的数据条目的 Excel 表。现在我可以填写我的 excel 条目,但它只填充第一个条目,之后我的程序就停止了。我有超过 1,50,000 个条目。我希望我的程序继续运行,直到它填满我表单中的所有条目。我怎么做。请帮帮我!

我在 excel 中的条目

我的代码

from sre_parse import State
from tkinter.tix import Select
from unicodedata import name
from selenium import webdriver

from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
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.webdriver.chrome.options import Options
import pandas as pd
import xlrd
import time

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)


driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), chrome_options=chrome_options)

driver.get("https://ssg2021.in/citizenfeedback")




# readign the excel file
df  = pd.read_excel('Rajnandgaon_List2.xlsx')

# looping through all the data

for i in df.index:

    time.sleep(3)
    # selcting states
    state_select = driver.find_element(By.XPATH,'//*[@id="State"]')
    drp1 = Select(state_select)

    drp1.select_by_visible_text('Chhattisgarh')

    time.sleep(2)


    # selecting district
    district_select = driver.find_element(By.XPATH,'//*[@id="District"]')
    drp2 = Select(district_select)

    drp2.select_by_visible_text('RAJNANDGAON')
    entry = df.loc[i]

    # entering the age
    age = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[1]/div/div/input')

    age.send_keys(str(entry['age']))

    # respondant name
    rs_name = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[2]/div/div[1]/div/input')
    rs_name.send_keys(entry['name'])

    # rs mobile number
    rs_number = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[2]/div/div[2]/div/input')
    rs_number.send_keys(str(entry['mobile number']))

    # rs gender
    gender = driver.find_element(By.XPATH,'//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[2]/div/div[3]/div/select')
    rs_gender = Select(gender)
    rs_gender.select_by_visible_text('Male')



    # submitting the form
    submit = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[5]/input')
    submit.click()


    # second page
    # radio button 1
    radio_1 = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[1]/div[2]/div[1]/label[1]/input')
    radio_1.click()



    # radio button 2
    radio_1 = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[2]/div[2]/div[1]/label[1]')
    radio_1.click()


    # radio button 3
    radio_1 = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[3]/div[2]/div[1]/label[1]')
    radio_1.click()

    # radio button 4
    radio_1 = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[4]/div[2]/div[1]/label[1]')
    radio_1.click()


    # radio button 5
    radio_1 = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[5]/div[2]/div[1]/label[1]')
    radio_1.click()


    submit2 = driver.find_element(By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[2]/input')
    submit2.click()

【问题讨论】:

  • 最后一次点击后会发生什么,它仍然在同一页面上吗?
  • 是的。它只是停在最后一页。我希望它关闭浏览器,然后为每个条目启动一个新浏览器,直到它完成所有条目的填充。
  • 为什么不直接使用 driver.get() 回到起始 url。
  • 怎么样?你能通过示例代码展示我的代码吗
  • 在 df.index 中 for i 之后:driver.get("ssg2021.in/citizenfeedback")

标签: python excel selenium selenium-webdriver webautomation


【解决方案1】:

您的问题可以使用以下代码解决:

from sre_parse import State
from tkinter.tix import Select
from unicodedata import name
from selenium import webdriver

from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
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.webdriver.chrome.options import Options
import pandas as pd
import xlrd
import time
import openpyxl


# readign the excel file
ExcelPath = 'Excel_Path'
df = pd.read_excel(ExcelPath)
wb = openpyxl.load_workbook(ExcelPath)
ws = wb.worksheets[0]
maxrow = ws.max_row

# looping through all the data
for i in range(2, maxrow + 1):
    # Every Time Browser will open
    chrome_options = Options()
    chrome_options.add_experimental_option("detach", True)

    driver = webdriver.Chrome()

    driver.get("https://ssg2021.in/citizenfeedback")
    time.sleep(3)
    # selcting states
    state_select = driver.find_element(By.XPATH, '//*[@id="State"]')
    drp1 = Select(state_select)

    drp1.select_by_visible_text('Chhattisgarh')

    time.sleep(2)

    # selecting district
    district_select = driver.find_element(By.XPATH, '//*[@id="District"]')
    drp2 = Select(district_select)

    drp2.select_by_visible_text('RAJNANDGAON')
    entry = df.loc[i]

    # entering the age
    age = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[1]/div/div/input')

    age.send_keys(str(entry['age']))

    # respondant name
    rs_name = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[2]/div/div[1]/div/input')
    rs_name.send_keys(entry['name'])

    # rs mobile number
    rs_number = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[2]/div/div[2]/div/input')
    rs_number.send_keys(str(entry['mobile number']))

    # rs gender
    gender = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[4]/div[2]/div/div[3]/div/select')
    rs_gender = Select(gender)
    rs_gender.select_by_visible_text('Male')

    # submitting the form
    submit = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[1]/form/div[5]/input')
    submit.click()

    # second page
    # radio button 1
    radio_1 = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[1]/div[2]/div[1]/label[1]/input')
    radio_1.click()

    # radio button 2
    radio_1 = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[2]/div[2]/div[1]/label[1]')
    radio_1.click()

    # radio button 3
    radio_1 = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[3]/div[2]/div[1]/label[1]')
    radio_1.click()

    # radio button 4
    radio_1 = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[4]/div[2]/div[1]/label[1]')
    radio_1.click()

    # radio button 5
    radio_1 = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[1]/div[5]/div[2]/div[1]/label[1]')
    radio_1.click()

    submit2 = driver.find_element(
        By.XPATH, '//*[@id="zed_user_form"]/div/div[1]/div[2]/div/div/div[2]/form/div[2]/input')
    submit2.click()
    # After Clicking Submit Button Browser Will Quit
    driver.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 2021-01-05
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2018-01-02
    相关资源
    最近更新 更多