используя Selenium в Python, чтобы щелкнуть правый флажок - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в использовании селена, но не могу решить очень простую задачу. Мне нужно щелкнуть элемент, определяющий спальни: 2. Я использовал, я не знаю, сколько ссылок по xpath, по идентификатору, по имени, по классу, но селен просто не найдет элемент. Я также пытался просмотреть inte rnet, но не смог найти решения, которые мне помогли бы.

Вот sanpshot

enter image description here Например: используя

driver.find_element_by_id('agatha_bedrooms1588844814480_advancedSearch1').click()

Это не сработает. Селен не может найти элемент. Кажется, что этот элемент находится внутри другого элемента, но я не понимаю, как получить к нему доступ. Не могли бы вы мне помочь?

Большое вам спасибо.

G

Ответы [ 4 ]

0 голосов
/ 08 мая 2020

Вы можете попробовать этот xpath. надеюсь, что это поможет:

//*[@name='bedrooms']/following::*/*[text()='2']
0 голосов
/ 07 мая 2020

Кажется, что идентификаторы генерируются динамически, и в этом случае вы не можете полагаться на них. Попробуйте с этим xpath:

driver.find_element_by_xpath("//*[@name='bedrooms' and @value='2']/following::label").click()

Хотя обычно рекомендуется работать с ожиданиями. Примерно так:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[@name='bedrooms' and @value='2']/following::label"))).click()

Убедитесь, что этот импорт работает, пока не заработает

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
0 голосов
/ 07 мая 2020

Большое спасибо, после нескольких и нескольких испытаний я смог обойти этот способ:

elemt = driver.find_element_by_xpath("//*@name='bedrooms']").find_element_by_xpath("//[@value='2']") 
idvar = elemt.get_attribute("id") 
elemt2 = driver.find_element_by_xpath("//label[@for='" + idvar + "']") 
elemt2.click()

Кажется, что флажок был скрыт под меткой (?!), Так что Selenium не хотел нажимать на нем.

0 голосов
/ 07 мая 2020

Если флажок находится внутри iframe, сделайте следующее:

# basically just select the iframe any way you want
frame = driver.find_element_by_css_selector("iframe")

driver.switch_to.frame(frame)

driver.find_element_by_id('agatha_bedrooms1588844814480_advancedSearch1').click()

edit: Я нашел решение. Типа некрасиво, но работает lol

element = driver.find_elements_by_css_selector("input[name=bedrooms][value='2']")[0]
element.find_element_by_xpath("..").click()
...