使用Selenium的python驱动程序选择带有文本的<option>的正确方法是什么

时间:2019-05-15 18:55:22

标签: python selenium-webdriver web-scraping

我正在使用Selenium Web驱动程序进行网络抓取。我已经完成了一个选项值,但我必须处理一个选项文本。我必须抓取一个选项文本并传递给your_choice=driver.find_element_by_xpath("//select/option[@value = {}]".format(b))。下面是代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup

driver = webdriver.Firefox(executable_path='./geckodriver')
url = 'https://ipr.etsi.org'
driver.get(url)
button = driver.find_element_by_id(("btnConfirm"))
button.click()
select_element = Select(driver.find_element_by_name("ctl00$cphMain$lstCompany"))
data = []
for option in select_element.options:
    data.append(option.get_attribute('value'))
for a in data:
    b = a
    your_choice = driver.find_element_by_xpath("//select/option[@value = {}]".format(b))
    # continue
    your_choice.click()
python_button = driver.find_element_by_id(("ctl00_cphMain_btnSearch"))
python_button.click()

上面是我用选项值完成的代码。现在,我必须使用选项文本。

2 个答案:

答案 0 :(得分:1)

因为您要按文本选择。

将option.get_attribute('value')更改为

    data.append(option.text) #this will add 'Optis Cellular Technology','Orange',etc to data

和“ // select / option [@value = {}]”添加到

    if a != '':   #to skip the first option because it's empty
      your_choice = driver.find_element_by_xpath("//select/option[text()='{0}']".format(a))
      your_choice.click() 

答案 1 :(得分:1)

如果要按可见文本进行选择,则python使用select_by_visible_text方法。您需要做的就是捕获option元素,如下所示:

select = Select(driver.find_element_by_id("option_id"))

或通过您选择的任何其他选择器,然后使用功能:

select.select_by_visible_text("visible_text")