我正在使用 Selenium 自动下载一份报告。为此,我需要将大约 3000 个 ID 以循环方式粘贴到网页的输入字段中,每个 ID 大约有 30 万个,然后点击“下载”按钮,等待大约 40 秒即可下载报告。之后,点击“清除”按钮清除输入字段,再将另外 3000 个值(或 ID)粘贴到输入字段中,再次点击“下载”。重复此步骤,直到提取完数据框中某一列的所有 ID。
ID 之间以逗号分隔。
手动操作大约需要 2 秒来粘贴值(正好 3000 个)并下载,然后等待 40 秒,清除并粘贴另外 3000 个 ID。重复此过程。
但是,在登录 url 后使用 selenium 脚本时,关闭所有弹出窗口并选择精确选项,然后在输入(或使用 input_filed.send_keys(ids) 和 input_field.send_keys(Keys.ENTER))时,120 秒出现超时错误。我没有 120 秒的时间等待,而手动只需 2 秒即可抛出错误。
该脚本对于 200 左右的 ID 运行良好,但对于 3000 左右的 ID 则不行。我希望粘贴 3000 个值,以便加快进程。
请提供解决方案。
下面是我尝试的代码。请看一下最后主要问题在哪里。
from selenium import webdriver
#you have to create instance wait
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("MY URL")
wait = WebDriverWait(driver, 10)
try:
close_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.toast-close-button")))
close_button.click()
print("Popup Closed")
except Exception as e:
print("No Popup appeared. or popup closed")
print("Error: ", e)
try:
username_input = wait.until(EC.presence_of_element_located((By.ID, "username")))
username_input.send_keys("[email protected]")
print("UserName Entered")
except Exception as e:
print("Failed to enter Username")
print("Error: ", e)
try:
password_input = wait.until(EC.presence_of_element_located((By.ID, "password")))
password_input.send_keys("some_password")
print("Password Entered")
except Exception as e:
print("Failed to enter Password")
print("Error: ",e)
try:
submit_button = wait.until(EC.element_to_be_clickable((By.ID, "loginSubmit")))
submit_button.click()
print("Submit Button Clicked")
except Exception as e:
print("Failed to click submit button")
print("Error: ",e)
ids_option= WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/div/div[2]/div[2]/div[2]/div/div/div[1]/div/div/div/div/div[1]/div'))
)
ids_option.click()
option = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//div[text()="Option for Id selected"]'))
)
option.click()
input_click_target = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/div/div[2]/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div/div[1]/div[1]'))
)
input_click_target.click()
focused_input = WebDriverWait(driver, 10).until(
lambda d: d.execute_script("return document.activeElement")
)
from selenium.webdriver.common.keys import Keys
focused_input.send_keys(id_string) #comma seperated ids
focused_input.send_keys(Keys.ENTER)
大约 120 秒后,它会抛出错误。如果我只输入 15 或 200 个 ID,它会起作用,但输入 3000 个 ID 时则不起作用。
请提供更快的解决方案
我尝试了上面提到的代码,并期望下载每个包含 3000 个 id 的单独 csv 文件,直到 id 结束。