Как найти комбинированный список и установить значение с помощью Selenium и find_element_by_xpath - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь установить значение в выпадающем списке, используя селен. Но инструкция find_element_by_xpath не может найти комбинированный список по классу или ng-модели (подробно я пытаюсь изменить период времени для акции с одного дня до одной недели)

Веб-страница содержит следующее javascript для элемента, который я ищу

**<select ng-model="analysisGraph.periodselector.period" class="ng-valid ng-dirty ng-valid-parse user-success ng-touched">**
    <!-- ngIf: !analysisGraph.periodselector.dayOnly -->
    <option ng-if="!analysisGraph.periodselector.dayOnly" value="INTRADAY" class="ng-binding ng-scope">Intradag</option><!-- end ngIf: !analysisGraph.periodselector.dayOnly --><!-- ngIf: !analysisGraph.periodselector.dayOnly -->
    <option ng-if="!analysisGraph.periodselector.dayOnly" value="ONE_WEEK" class="ng-binding ng-scope">1 uke</option><!-- end ngIf: !analysisGraph.periodselector.dayOnly -->
        <option value="ONE_MONTH" class="ng-binding">1 mnd</option><!-- ngIf: !analysisGraph.periodselector.hideOption.hide3m -->
    <option ng-if="!analysisGraph.periodselector.hideOption.hide3m" value="THREE_MONTHS" class="ng-binding ng-scope">3 mnd</option><!-- end ngIf: !analysisGraph.periodselector.hideOption.hide3m --><!-- ngIf: !analysisGraph.periodselector.hideOption.hide6m -->
    <option ng-if="!analysisGraph.periodselector.hideOption.hide6m" value="SIX_MONTHS" class="ng-binding ng-scope">6 mnd</option><!-- end ngIf: !analysisGraph.periodselector.hideOption.hide6m -->
        <option value="YTD" class="ng-binding">YTD</option><!-- ngIf: !analysisGraph.periodselector.hideOption.hide1y -->
    <option ng-if="!analysisGraph.periodselector.hideOption.hide1y" value="ONE_YEAR" class="ng-binding ng-scope">1 år</option><!-- end ngIf: !analysisGraph.periodselector.hideOption.hide1y --><!-- ngIf: !analysisGraph.periodselector.hideOption.hide3y -->
    <option ng-if="!analysisGraph.periodselector.hideOption.hide3y" value="THREE_YEARS" class="ng-binding ng-scope">3 år</option><!-- end ngIf: !analysisGraph.periodselector.hideOption.hide3y --><!-- ngIf: !analysisGraph.periodselector.hideOption.hide5y -->
    <option ng-if="!analysisGraph.periodselector.hideOption.hide5y" value="FIVE_YEARS" class="ng-binding ng-scope">5 år</option><!-- end ngIf: !analysisGraph.periodselector.hideOption.hide5y --><!-- ngIf: hasLaunchData -->
</select>

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

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from bs4 import BeautifulSoup
import pymysql
import ose_data

chrome_options = Options()
driver = webdriver.Chrome(executable_path='chromedriver', options=chrome_options)
driver.get('https://www.oslobors.no/markedsaktivitet/#/details/ADE.OSE/overview')
time.sleep(5)
bs = BeautifulSoup(driver.page_source, 'html.parser')
**driver.find_element_by_xpath("//select[@class='ng-valid ng-dirty ng-valid-parse user-success ng-touched']/option[text()='ONE_WEEK']").click()**

, но он не работает со следующей ошибкой:

Ошибка: selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// select [@ class = 'ng-valid ng-dirty ng-valid-parse user-success ng-touched '] / option [text () =' ONE_WEEK '] "} (информация о сеансе: chrome = 79.0.3945.130)

Я также пытался выполнить поиск с driver.find_element_by_xpath ("// select [@ ng-model = 'analysisGraph.periodselector.period'] / option [text () = 'ONE_WEEK']"). Click ()

С такой же ошибкой кто-нибудь видит какие-нибудь явные ошибки от программиста noob Python? :)

1 Ответ

1 голос
/ 27 января 2020

Xpath неверен, используйте селектор select[ng-model="analysisGraph.periodselector.period"] css, чтобы получить элемент. Элемент представляет собой выпадающий список с тегом select , чтобы выбрать его, используйте класс Select. * * * * * * * * * * * * * * * * * * * * * * Добавлен WebDriverWait, чтобы дождаться, когда элемент станет кликабельным, прежде чем с ним работать

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