Невозможно прокрутить какой-либо элемент в поле зрения при использовании псевдо-селектора внутри driver.execute_script () - PullRequest
3 голосов
/ 20 января 2020

Я создал скрипт, использующий селен для динамического создания текста. Это требование, что я использую селен, поэтому в этом случае я не хочу go для xhr. Я пытаюсь использовать pseudo selector в селене, определяя explicit wait в нем. Поскольку селен не поддерживает pseudo selector, как в :contains(), я использовал javascript команду driver.execute_script() для достижения цели.

Теперь способ, которым я пытался работать, работает непоследовательно, поскольку текст, который я хочу взять не находится в области просмотра. Если я прокручиваю немного вниз вручную во время работы скрипта, он работает. Кстати, Xpath здесь не вариант.

Как прокрутить элемент в поле зрения, используя псевдоселектор внутри driver.execute_script ()?

Я пробовал как [работает непоследовательно]:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

with webdriver.Chrome() as driver:
    wait = WebDriverWait(driver, 10)
    driver.get('https://www.nyse.com/quote/XNYS:AAN')

    item = wait.until(
        lambda driver: driver.execute_script('''return $('span:contains("AARONS")')[0];''')
    )
    print(item.text)

Ожидаемый результат:

AARONS INC

PS Прежде чем пометить этот пост как дубликат, убедитесь, что вы хотя бы прочитайте название вопроса.

Ответы [ 2 ]

5 голосов
/ 22 января 2020

Вы можете использовать возвращенный WebElement для выполнения другой JavaScript команды

item = wait.until(
    lambda d: d.execute_script('''return $('span:contains("AARONS")')[0];''')
)

driver.execute_script('arguments[0].scrollIntoView();', item)

Или в одном скрипте

item = wait.until(
    lambda d: d.execute_script(
        '''var el = $('span:contains("AARONS")')[0];
        if (typeof el !== "undefined") {
            el.scrollIntoView();
        }
        return el;''')
)

Это будет ждать, пока элемент существует, и прокрутить это в поле зрения.

0 голосов
/ 28 января 2020

Вы также можете попробовать, определив элемент CSS

Создать общий метод с параметром CSS и использовать его повторно

script = "document.querySelector('#{css_selector}').scrollIntoView(true);"

driver.execute_script(script)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...