Попытка пометить документы на одной странице в селене python - PullRequest
0 голосов
/ 29 марта 2020

Для этого мне нужно открыть таблицу, затем нажать на изображение. затем нажмите на 2 разные кнопки и сделайте это снова. Вот l oop:


elem1 = driver.find_element_by_xpath("//input[@value= '2350321']")
elem1.click()
elem2 = driver.find_element_by_class_name("positive")
elem2.click()

button1 = driver.find_element_by_xpath("//ul/li[7]/a")
button1.click()
el = driver.find_element_by_id("logo")
button2 = webdriver.common.action_chains.ActionChains(driver)
driver.implicitly_wait(5)

for i in range(4):
    driver.implicitly_wait(5) 

    button2.move_to_element_with_offset(driver.find_element_by_id("logo"), 642, 147).click().click().perform()
    driver.implicitly_wait(15)

    button3 = driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/form/div[2]/table/tbody/tr[2]/td[8]/a/img")
    button3.click()
    driver.implicitly_wait(3)

    button4 = driver.find_element_by_class_name("positive")
    button4.click()
    driver.implicitly_wait(2)

    button5 = driver.find_element_by_class_name("positive")
    button5.click()
    driver.execute_script("window.history.go(-3)")
    time.sleep(4)

Я получаю «устаревшую ссылку на элемент: элемент не прикреплен к документу страницы» всякий раз, когда l oop запускается во второй раз (когда button2.move_to_element_with_offset(driver.find_element_by_id("logo"), 642, 147).click().click().perform() выполняется)

1 Ответ

0 голосов
/ 29 марта 2020

Попробуйте использовать приведенный ниже фрагмент.

Требуется импорт

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

Добавьте 2 метода ниже при импорте или, если вас устраивает python, пожалуйста, поместите их в отдельную библиотеку / file.

def highlight(web_driver, element):
    web_driver = element._parent
    original_style = element.get_attribute('style')
    web_driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element,
                              "background: yellow; border: 2px solid red;")
    time.sleep(.3)
    web_driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element, original_style)


def element_click(web_driver,xpath, max_time_out=30):
    wait = WebDriverWait(web_driver, max_time_out)
    ele = wait.until(EC.element_to_be_clickable((By.XPATH,xpath)))
    highlight(webdriver, ele)
    ele.click()

Теперь следует вашему сценарию, используя явное ожидание

element_click(driver, "//input[@value= '2350321']")
element_click(driver, "//*[@class='positive']")
element_click(driver, "//ul/li[7]/a")

for i in range(4):
    element_click(driver, "//*[@id='logo']") # check if it works if not then you can use the below line and comment this line.
    # driver.execute_script("arugments[0].click()",driver.find_element_by_id("logo"))
    element_click(driver, "/html/body/div[1]/div/div[3]/form/div[2]/table/tbody/tr[2]/td[8]/a/img")
    element_click(driver, "//*[@class='positive']")
    element_click(driver, "//*[@class='positive']")
    driver.execute_script("window.history.go(-3)")
    time.sleep(4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...