Выполнение шагов в цикле for последовательно при использовании Python и Selenium
Я пытаюсь перебрать список ссылок на веб-странице, нажимая на каждую, используя селен, затем копируя тинилинк с каждой страницы, прежде чем, наконец, вернуться на главную страницу списка. Пока он будет обращаться к странице, но я изо всех сил пытаюсь получить последовательность
нажмите ссылку-> загрузить страницу-> нажмите "поделиться" -> нажмите "копировать"
В настоящее время он получает доступ к главной странице списка и сразу нажимает "поделиться" перед тем, как перейти по первой ссылке. Возможно, я слишком много думаю об этом, так как думал, что sleep(1) сократит программу до следующего шага. Пожалуйста помоги!
#below accesses each link, opens the tinylink, and copies it
powerforms = driver.find_element_by_xpath("//*[@id='main-content']/ul")
links = powerforms.find_elements_by_tag_name("li")
for link in links:
link.click()
sleep(1)
#clicks 'Share' button to open popout
share = driver.find_element_by_id("shareContentLink")
share.click()
sleep(1)
#clicks 'Copy' button to copy the tinylink to the clipboard
copy = driver.find_element_by_id("share-link-copy-button")
copy.click()
sleep(1)
break
1 ответ
Вместо сна вы должны использовать
WebDriverWait
, чтобы убедиться, что элемент присутствует на странице, загружен и интерактивен. Сон не учитывает скорость вашего интернета и т. Д.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
driver = webdriver.Firefox()
driver.get(url)
max_wait_time = 10 #seconds
powerforms = driver.find_element_by_xpath("//*[@id='main-content']/ul")
links = powerforms.find_elements_by_tag_name("li")
for link in links:
try:
link = WebDriverWait(driver, max_wait_time).until(EC.presence_of_element_located(link))
link.click()
# clicks 'Share' button to open popout
share = WebDriverWait(driver, max_wait_time).until(EC.presence_of_element_located((By.ID, 'shareContentLink')))
share.click()
# sleep(1)
# clicks 'Copy' button to copy the tinylink to the clipboard
copy = WebDriverWait(driver, max_wait_time).until(EC.presence_of_element_located((By.ID, 'share-link-copy-button')))
copy.click()
# sleep(1)
except TimeoutException:
print("Couldn't load element")
continue