Selenium: выберите по «параметру выбранное значение», которого нет по умолчанию - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь соскрести текстовое поле 'активность' с двух страниц здесь и здесь .

Я написал основу кода:

options = Options()
options.binary_location=r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
options.add_experimental_option('excludeSwitches', ['enable-logging'])
#options.add_argument("--headless")
driver = webdriver.Chrome(options=options,executable_path='/mnt/c/Users/kela/Desktop/selenium/chromedriver.exe


url = 'http://www.uwm.edu.pl/biochemia/biopep/peptide_data_page1.php?zm_ID=' + str(i) #where str(i) is either 2500 or 2700 in this example
driver.get(url)
header = driver.find_element_by_css_selector('[name="activity"]')
children = header.find_elements_by_xpath(".//*")

У меня есть две проблемы:

  1. Мне нужно только извлечь элемент активности, который является «значением, выбранным параметром», я не хочу, чтобы ВСЕ действия возвращались.
  2. НО, если опция является первым элементом в списке, как в случае с одной из показанных здесь страниц, чья активность - «aami»;'selected value' не является опцией, так как это значение по умолчанию.

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

neuropeptide | ne
alpha-amylase inhibitor | aami

с этих двух веб-страниц, если кто-нибудь может помочь.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Используйте Select класс и получите first_selected_option.Вам нужно вызвать WebDriverWait И presence_of_element_located

i=2700
url = 'http://www.uwm.edu.pl/biochemia/biopep/peptide_data_page1.php?zm_ID=' + str(i) #where str(i) is either 2500 or 2700 in this example
driver.get(url)
element=WebDriverWait(driver,20).until(EC.presence_of_element_located((By.NAME,"activity")))
select=Select(element)
print(select.first_selected_option.text)

Выход:

neuropeptide    |    ne

Если вы измените значение на 2500, вы получите alpha-amylase inhibitor | aami

Импортирует следующее для выполнения вышеуказанного кода.

from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
1 голос
/ 24 сентября 2019

Вы должны проверить атрибуты элементов option.Если «выбран» атрибут в любой опции, получить его.Если атрибут «selected» отсутствует в любом параметре, получите только первый параметр.

Я реализовал атрибуты поиска с BeautifulSoup.Вы также можете реализовать с Selenium с помощью выполнения кода Javascript.Пример здесь

Мой код:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Firefox()
url = 'http://www.uwm.edu.pl/biochemia/biopep/peptide_data_page1.php?zm_ID=2500'

driver.get(url)

header = driver.find_element_by_css_selector('[name="activity"]')
soup = BeautifulSoup(header.get_attribute("innerHTML"), 'html.parser')

options = soup.find_all('option')
for option in options:
    if 'selected' in option.attrs:
        print(option.text)
        break
else:
    print(options[0].text.strip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...