Python / selenium - 定位元素'By' - 用变量指定定位器策略?

时间:2016-10-11 15:39:58

标签: python selenium

创建了一个selenium浏览器并检索了一个网页,这很好用:

...
if selenium_browser.find_element(By.ID, 'id_name'):
    print "found"
...

给出这样的元组:

tup = ('ID', 'id_name')

我希望能够找到这样的元素:

if selenium_browser.find_element(By.tup[0], tup[1]):

但我收到此错误

AttributeError: type object 'By' has no attribute 'tup'

如何在不写的情况下完成此操作:

if tup[0] == 'ID':
    selenium_browser.find_element(By.ID, tup[1])
    ...
elif tup[0] == 'CLASS_NAME':
    selenium_browser.find_element(By.CLASS_NAME, tup[1])
    ...
elif tup[0] == 'LINK_TEXT':
    etc etc

http://selenium-python.readthedocs.io/api.html?highlight=#module-selenium.webdriver.common.by

2 个答案:

答案 0 :(得分:3)

如果您想直接向find_element提供元组,请在前面添加*

locator = (By.ID, 'id')
element = driver.find_element(*locator)

或者使用以字符串形式提供的方法:

locator = ('ID', 'id_name')
driver.find_element(getattr(By, locator[0]), locator[1])

答案 1 :(得分:1)

您的语法已关闭。

文档说这应该像这样使用:find_element(by='id', value=None)

所以而不是

if selenium_browser.find_element(By.tup[0], tup[1]):

你应该做

if selenium_browser.find_element(tup[0], tup[1]):
#or
if selenium_browser.find_element(by=tup[0], value=tup[1]):

您可能需要或可能不需要小写by元素IE tup[0].lower()