you need to select a python_使用Select的Python Selenium选择选项(元素不可见?) - python

我试过使用类似问题中提到的一些方法,但是没有运气。在HTML源代码中,显然有“值”和“文本”属性,但是当我使用selenium.webdriver访问这些属性时,我似乎无法访问它们?

注释选择导致页面上数据的更改...

编辑2:

盖伊在下面指出,实际的下拉列表可能是元素而不是元素。但是,使用el.click()只会闪烁,并且不会打开下拉列表。

编辑1:

现在可以标识和元素,但我无法进行选择。我相信页面也是用javascript,因此我不确定这是否会影响所使用的方法。

原始帖子:

网页:

https://www.racv.com.au/on-the-road/driving-maintenance/fuel-prices.html

选择HTML代码,以提高可见性,省略一些选项:

LRP

Unleaded

Diesel

Premium Unleaded 98

我相信我可以毫无问题地选择Select元素:

from selenium import webdriver

from selenium.webdriver.support.ui import Select

url = 'https://www.racv.com.au/on-the-road/driving-maintenance/fuel-prices.html'

driver = webdriver.Chrome()

driver.get(url)

driver.implicitly_wait(20)

fuel_select = Select(driver.find_element_by_id('filter-select-6'))

当我打印选项时,我得到:

for fuel_option in fuel_select.options:

print(fuel_option)

使用select():

for fuel_option in fuel_select.find_elements_by_tag_name('option'):

if fuel_option.text == "Diesel":

fuel_option.select()

错误:

Traceback (most recent call last):

File "C:/file.py", line 18, in

fuel_option.Select()

AttributeError: 'WebElement' object has no attribute 'select'

使用click()或使用任何select_by_xxx():

for fuel_option in fuel_select.find_elements_by_tag_name('option'):

if fuel_option.text == "Diesel":

fuel_option.click()

#or using select_by_xxx

fuel_select.select_by_value('8')

错误:

selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable: Element is not currently visible and may not be manipulated

(Session info: chrome=74.0.3729.169)

(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17134 x86_64)

python参考方案

Select是WebElement的包装,select()不是有效的方法。请参考Select doc

您是否尝试过使用select_by_value:

fuel_select = Select(driver.find_element_by_id('filter-select-6'))

fuel_select.select_by_value("8")

或通过可见文字:

fuel_select = Select(driver.find_element_by_id('filter-select-6'))

fuel_select.select_by_visible_text("Premium Unleaded 98")

编辑1

尝试首先单击()以使下拉菜单可见:

el = driver.find_element_by_id('filter-select-6')

el.click()

fuel_select = Select(el)

编辑2:

我相信您的问题与您使用css属性style="display: none;"的事实有关

您也不应该手动看到该下拉列表。

请参考css syntax doc了解更多详情

使用“无”时:元素已完全删除

可能不是“理想”的,但是您可以使用以下方法更改此属性的值以使其再次可见:

driver.execute_script('arguments[0].style.display = "block";', el)

代码如下所示:

el = driver.find_element_by_id('filter-select-6')

driver.execute_script('arguments[0].style.display = "block";', el)

fuel_select = Select(el)

fuel_select.select_by_value("8")

编辑3:

刚注意到您提供了网站!很有用。

因此,下拉菜单被隐藏为另一个元素,仅在单击后才可用。

这是代码,它对我有用

from selenium import webdriver

from selenium.webdriver.common.touch_actions import TouchActions

from selenium.webdriver.support.ui import Select

# Get the first element and tap on it, note you might have to tap few time.

el = driver.find_element_by_css_selector('.chosen-single > div')

action = TouchActions(driver)

action.tap(el).perform()

# once the dropdown is open it does not seems that the Select el is the one to use

els = driver.find_elements_by_css_selector('.active-result')

for el in els:

if el.text == 'Diesel':

el.click()

break

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …字符串文字中的正斜杠表现异常 - python

为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…如何从模拟实例的方法引发异常? - python

我要测试的演示功能非常简单。def is_email_deliverable(email): try: return external.verify(email) except Exception: logger.error("External failed failed") return False 此函数使用我要模拟的external…Pycharm失去了视图和模板之间的连接 - python

有一天,我发现一个Django应用程序失去了视图和模板之间的连接。我检查了整个项目,此问题仅得到一个应用程序。函数和模板之间的视图没有连接。模板中没有突出显示代码,模板中没有代码完成,并且模板无法识别标签,例如:{% url%},

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值