Python (Selenium) Выбор выпадающего списка из HHPRED - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь выбрать пункты выпадающего меню на сайте HHPRED. (URL: https://toolkit.tuebingen.mpg.de/tools/hhpred), и я продолжаю натыкаться либо на «объект не найден», либо на «объект не активен / не кликабелен».

# Input protein from txt file (predator_file variable)
text_area = driver.find_element_by_id('__BVID__121')
text_area.send_keys(predator_file)

# Input PDB, SCOP, PFAM, and NCBI domains

 first_click = driver.find_element_by_id('__BVID__130')
 scop_click = driver.find_element_by_link_text("SCOPe")
 pfam_click = driver.find_element_by_link_text("Pfam")
 ncbi_click = driver.find_element_by_link_text("ncbi_")

Я знаю, что правильно работаю с селеном, потому что первая часть моей текстовой записи копируется правильно, но, когда я работаю над выпадающим меню, от выбора его до выбора того, что мне нужно, - Я потерялся. Смотрите ниже проверенные элементы для HHPRED и раскрывающийся список, который я смотрю на решение.

enter image description here

enter image description here

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 13 апреля 2020

В настоящее время ваш URL недоступен из-за c кредитов. Вы можете использовать код ниже, чтобы выбрать значение / видимый текст из выпадающего списка.

from selenium import webdriver
from selenium.webdriver.support.ui import Select 

select= WebDriverWait(driver, 30).until(
            EC.element_to_be_clickable((By.XPATH, "select element xpath")))

print(len(select.options))
select.select_by_value("")          # select by value
select.select_by_visible_text('')  # select by visible text

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

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

или

driver.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()

Обновленное решение : это пользовательский выпадающий элемент, поэтому вам нужно обращаться с ним по-другому. Пожалуйста, найдите ниже код для справки. Я проверил это и он работает, как ожидалось.

driver.get("https://toolkit.tuebingen.mpg.de/tools/hhpred")
main_window = driver.current_window_handle
wait = WebDriverWait(driver, 20)

wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn sign-in-link btn-href btn-sm']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "(//fieldset[@class='form-group']//input)[2]"))).send_keys('')
wait.until(EC.element_to_be_clickable((By.XPATH, "(//fieldset[@class='form-group']//input)[3]"))).send_keys('')
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-secondary']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'Got it!')]"))).click()

print wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'Paste Example')]"))).text
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
clickElement=wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='multiselect__tags']")))
ActionChains(driver).move_to_element(clickElement).click().perform()
wait.until(EC.element_to_be_clickable((By.XPATH, "//li[*]//span[contains(text(),'TIGRFAMs_v15.0')]"))).click()

Выход:

enter image description here

...