1

我正在尝试使用 selenium 编写一个 python 程序,不幸的是我遇到了一个奇怪的问题。我有用 JSP 编写的网页,我无法使用.find_element_by_*命令访问元素,除了.find_elements_by_id. 找不到任何标签。

tag_name如果我使用其 ID 访问某些元素,那么我可以通过其他查找命令(例如、name等)访问其子项。例如,如果我有这个 HTML:

<div id="myId">
    <div name="myName">Test Div</div>
</div>

我可以访问内部div.find_element_by_id("myId").find_element_by_name("myName")但我无法使用它访问它.find_element_by_name("myName"),如果我使用.find_elements_by_tag_name("div")整个 HTML,我得到一个空列表。

实际上我的网页与 IE 7 兼容,我尝试在 中设置参数版本desired_capabilities,但没有帮助,并且 web 驱动程序默认加载 IE 10。

编辑1:

这是我使用的python脚本:

from selenium import webdriver

def my_method(web_driver = "Firefox"):
    # launch web-driver
    if web_driver.upper() == "IE":
        driver = webdriver.Ie()
        print "IE"

    else:
        driver = webdriver.Firefox()
        print "FireFox"

    # navigating
    driver.get("http://python.org")

    # accessing elements
    ## .find_by_tag_name
    e = driver.find_elements_by_tag_name("html")
    print "number of html tags: " + str(len(e))

    e = e[0].find_elements_by_tag_name("a")
    print "number of A tags using html tag: " + str(len(e))

    e = driver.find_elements_by_tag_name("a")
    print "number of A tags: " + str(len(e))

    e = driver.find_elements_by_tag_name("body")
    print "number of body tags: " + str(len(e))

    e = driver.find_elements_by_tag_name("html")
    e = e[0].find_elements_by_tag_name("body")
    print "number of body tags using html tag: " + str(len(e))

    ## .find_by_xpath
    e = driver.find_elements_by_xpath("//a")
    print "number of A xpath: " + str(len(e))

    e = driver.find_elements_by_xpath("/html/body")
    print "number of body xpath: " + str(len(e))

    ## .find_by_class_name
    e = driver.find_elements_by_class_name("reference")
    print "number of A using class name: " + str(len(e))

    ## .find_by_css_selector
    e = driver.find_elements_by_css_selector("a[class='reference']")
    print "number of A using css selector: " + str(len(e))

    driver.close()

# execute
my_method(web_driver = "Firefox")
my_method(web_driver = "Ie") 

编辑2:

在 HTML 中,我们必须将部分分开:菜单和主页。每一个都有一个 HTML 标签,并单独呈现。两部分的结果 HTML 代码都很简单,类似于:

<html lang="en_us">
    <body>
        <div id="testdiv">
        <table align="center" border="0">
            <tr bgcolor="#666666">
                <td><img src="img.jpg"/></td>
                <td><div id="message" style="color:white;font-size:12px;font-    weight:bold;">message</div></td>
            </tr>
        </table>
        </div>
    </body>
</html>

编辑 3:

如果有人熟悉 JSP,我想知道如何将 JSP 标签转换为 HTML 标签,因为它可以帮助我检测访问标签的问题。

4

2 回答 2

0

有时候是这样的。我也遇到过同样的问题。

我使用 XPath 解决了它。对于您的问题,XPath 表达式将是:

//div/div[contains(@name,"myName")]

或者

//div[contains(@name,"myName")]

或者

//div[text()="Test Div"]

或者

//div[@id="myId"]/div
于 2013-10-22T19:10:42.683 回答
0

感谢大家在这个问题上试图帮助我。我解决了这个问题,我认为分享解决方案会很棒。

其实有一点我没有注意;页面中有多个框架,我必须在框架之间切换才能访问元素。因此,为了切换到每个帧,我.switch_to_default_content()先切换到主要内容,然后再.switch_to_frame(frame_object)切换到所需的帧。

于 2013-11-05T07:51:35.890 回答