Использование Selenium в Python для нажатия на HTML Тег с Java не работает - PullRequest
0 голосов
/ 29 апреля 2020

На веб-странице есть номера страниц, по которым можно перейти, чтобы перейти на следующую страницу. Номера страниц находятся в теге с href для вызова javascript.

После этого ...

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

xpath = 'appropriate_xpath_string'

wait_presence = WebDriverWait(driver, 10).until(
  EC.presence_of_element_located((By.XPATH, xpath))
)
wait_clickable = WebDriverWait(driver, 10).until(
  EC.element_to_be_clickable((By.XPATH, xpath))
)

И вычисление scroll_y = расстояние, необходимое для отображения элемента ...

driver.execute_script('window.scrollTo(0,', scroll_y, ')')

Я пробовал следующее:

driver_find_element_by_xpath('xpath').click()

driver_find_element_by_xpath('xpath').send_keys('\ue007') (отправка клавиши ввода.)

driver.execute_script("arguments[0].click()", element) ( JavaScript трюк.)

ActionChains щелкает

Проблематический c Элемент:

<a href="javascript:__doThis('nl00$CPH1$dOR$n16$nl01','')">2</a>

__ doThis () функция по существу делает форму .submit () с некоторыми параметры.

Редактировать: после отправки события щелчка Developer Tools показывает ошибку:

VM1560:1 Uncaught ReferenceError: __doThis is not defined
    at <anonymous>:1:1

После сканирования через HTML / js я заметил, что функция __doThis не определена в ChromeDriver , Когда я загружаю страницу в Edge или Chrome тег с функцией __doThis присутствует. Так почему же функция javascript не загружается в ChromeDriver?

РЕДАКТИРОВАТЬ 2: Я загрузил chromedriver.exe без настройки специальных параметров, и это решило проблему. Теперь мне нужно выяснить, какая опция нарушает функцию javascript страницы.

РЕДАКТИРОВАТЬ 3: Кажется, этот раздел кода ломает внутреннюю страницу javascript:

    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    driver.execute_cdp_cmd("Network.enable", {})
    driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser1"}})

Мне нужно провести некоторое исследование, чтобы понять, почему.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Попробуйте следующий код, который будет прокручиваться к представлению элемента, используя location_once_scrolled_into_view

wait_presence = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
wait_presence.location_once_scrolled_into_view
driver.execute_script("arguments[0].click();", wait_presence)

ИЛИ javascripts executor для прокрутки.

wait_presence = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
driver.execute_script("arguments[0].scrollIntoView()", wait_presence)
driver.execute_script("arguments[0].click();", wait_presence)
0 голосов
/ 29 апреля 2020

Попробуйте следующий код:

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "2"))).click()

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...