[英]selecting a drop down item from a <div> menu selenium python
所以我有点卡住了! 我正在尝试从“所有评论”下拉列表中选择一个项目,但是它不像我可以选择每个项目的元素然后单击它那样进行交互。
相反,它的行为就像一个元素,在它的标签上显示不同的结果。 有谁知道我如何从这个菜单中选择一个元素?
例如,让菜单从下拉菜单中选择“Google”标签。
供参考: https : //www.google.com/maps/place/Hilton+London+Bankside/@51.5056536,-0.1033145,17z/data=!3m1!4b1!4m10!3m9! 1s0x487604af6af74cc7: 0x6f74c4c7 : 0x6c4c4c5c 1i2!8m2!3d51.5056536!4d-0.1011258!9m1!1b1
引入WebDriverWait
() 和element_to_be_clickable
() 并单击All reviews
div 元素以打开下拉菜单,然后根据文本选择项目。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.get("https://www.google.com/maps/place/Hilton+London+Bankside/@51.5056536,-0.1033145,17z/data=!3m1!4b1!4m10!3m9!1s0x487604af6af74cc7:0x6c4cb3cbe03e95bf!5m2!4m1!1i2!8m2!3d51.5056536!4d-0.1011258!9m1!1b1")
#Dropdown text provide here
selectItem='Agoda'
#First click on the All reviews element to open up the dorpdown element
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div[aria-label='All reviews']"))).click()
#Select item from menu dropdown by text
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[@role='menuitem']//div[text()='"+ selectItem +"']"))).click()
浏览器快照:执行后
在这个特定的网页元素出现时,其中许多元素不仅仅存在于 DOM 内容中,您应该使用 WebDriverWait 方法等待特定元素被定位。
例如,让我们按照您的要求选择“Google”:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("the google link here, it's too big to paste it")
#Waiting until dropdown is visible , there are two dropdowns, taking the first one
menu = WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH, "
(//div[@class='cYrDcjyGO77__container'])[1]")))
menu.click()
#Waiting untill menu items is visible then selecting the second element - Google
item = WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH, "
(//div[@role='menuitem'])[2]")))
item.click()
您可以做的是找到您的下拉列表,然后列出所有选项并选择您的一个。 这是我的做法
el = driver.find_element_by_id("dropdown_id")
for option in el.find_elements_by_tag_name('option'):
if "GB" in option.text:
option.click() # select() in earlier versions of webdriver
break
我正在选择具有“GB”状态值的下拉列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.