Estou usando o Selenium para automatizar o download de um relatório. Para isso, preciso colar cerca de 3.000 IDs em um loop para IDs em torno de 300.000 em um campo de entrada de uma página da web, clicar no botão de download e aguardar cerca de 40 segundos para que o relatório seja baixado. Depois disso, clicar no botão "Limpar" para limpar o campo de entrada e colar outros 3.000 valores (ou IDs) no campo de entrada e clicar em "Download" novamente. Repita a etapa até o final de todos os IDs extraídos de uma coluna de um dataframe.
Os ids são separados por vírgula.
Para fazer isso manualmente, leva cerca de 2 segundos para colar os valores (exatamente 3.000) e fazer o download. Depois, aguarde 40 segundos, limpe e cole outros 3.000 IDs. Repita o processo novamente.
Mas ao usar o script Selenium depois de fazer login na URL, fechar todos os pop-ups e selecionar a opção exata e, em seguida, ao entrar (ou usar input_filed.send_keys(ids) e input_field.send_keys(Keys.ENTER)), ocorre um erro de tempo limite em 120 segundos. Não tenho 120 segundos para esperar apenas para que o erro seja gerado, quando leva apenas 2 segundos manualmente.
o script funciona bem para IDs em torno de 200, mas não 3000. Quero que 3000 valores sejam colados para que o processo seja rápido.
Por favor, forneça uma solução.
Abaixo está o código que testei. Por favor, veja no final onde está o problema principal.
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)
Aqui, o erro aparece depois de uns 120 segundos. Se eu usar apenas 15 ou 200 IDs e inseri-los, funciona, mas não para 3000.
por favor forneça uma solução mais rápida
Tentei o código mencionado acima e esperava baixar arquivos csv individuais para 3000 IDs cada até o final dos IDs.