Python Selenium-根据字符串查找表元素,然后单击关联单选按钮

时间:2018-07-18 08:05:44

标签: python selenium selenium-webdriver

我正在尝试根据他的文本值选择一个单选按钮。

在此site上 我跳过此代码的第一页(因为它是一个框架)

driver.switch_to_frame(0)
elem = driver.find_element_by_id("bedin")
elem.click()
clickWeiter()

之后,我想单击一个带有特定文本的单选按钮,例如“公共汽车”

我的问题是,实际的单选按钮在标签中

<input type="radio" name="mittel" value="2" onclick="zweiSelect4('neu',2);document.form1.linie.disabled=false;">

但是可读文本“ Bus”在td标签中

<td height="36" align="left" class="Stil1"><input type="radio" name="mittel" value="2" onclick="zweiSelect4('neu',2);document.form1.linie.disabled=false;">Bus </td>

到目前为止,我设法根据他的值而不是文本单击单选按钮

 driver.find_element_by_css_selector("input[type='radio'][value='2']").click

或者我设法得到了文字,但无法点击

list = driver.find_elements_by_tag_name("td")
for i in list:
    searchval =("Bus")
if searchval in str(i.text):
    print(" BULLSEYE" , i.text)
    i.click()

我的目标是要具有一个功能,该功能可以传递所需的文本(Sonstiges,Bus等),然后单击该元素。

2 个答案:

答案 0 :(得分:1)

您可以使用此 xpath

//td[contains(text(),'Bus')]/input  

在代码中:

driver.find_element_by_xpath("//td[contains(text(),'Bus')]/input").click()  

如前所述,您想要一个方法,可以尝试:

visible = "Bus"
driver.find_element_by_xpath("//td[contains(text(),'"+visible+"')]/input").click()  

方法:

def myfunc(visible):
 driver.find_element_by_xpath("//td[contains(text(),'"+visible+"')]/input").click()  

然后,您可以使用所需的文本来调用此方法。

希望这会有所帮助。

更新:

这些是文本节点,您可以尝试类似:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.action_chains import ActionChains

driver   = webdriver.Chrome(executable_path = r'C:/chromedriver_win32/chromedriver.exe')
driver.maximize_window()

wait = WebDriverWait(driver,40)

driver.get("http://nvv31.webqms.de/nvv/kunden/")

driver.switch_to.frame(driver.find_element_by_xpath("//frame[@src='kundengarantie.php']"))
driver.find_element_by_name('bedin').click()
continue_link = driver.find_element_by_link_text('weiter')
continue_link.click()

driver.switch_to.default_content()

driver.switch_to.frame(driver.find_element_by_xpath("//frame[@src='kundengarantie.php']"))

all_text = driver.find_elements_by_css_selector("td.Stil1 input") 

text_node = driver.execute_script("return arguments[0].nextSibling.textContent;", all_text[1])

text_node_trim = text_node.strip()

print(text_node_trim)


def myfunc(visible):
 driver.find_element_by_xpath("//td[contains(.,'"+text_node_trim+"')]/input").click()  

myfunc("Haltestelle / Bahnhof")

答案 1 :(得分:0)

根据网站http://nvv31.webqms.de/nvv/kunden/,单击与 Regionalzug Tram Bus 的文本相关的任何单选按钮可以编写一个将字符串作为参数的函数,如下所示:

def click_me(myString):
    driver.find_element_by_xpath("//table[@class='Stil1']//td[contains(.,'" + myString + "')]/input[@name='mittel']").click()

现在,您可以使用以下任何相关文本来调用函数click_me()

click_me("Regionalzug")
click_me("Tram")
click_me("Bus")
click_me("AnrufSammelTaxi")