【问题标题】:selenium find element with tag started with "#"selenium 查找标签以“#”开头的元素
【发布时间】:2021-08-02 13:50:20
【问题描述】:

我要爬网,结构如下:

<iframe>
    #document
        <html>
            ......
        </html>
</iframe>

我需要进入“html”并单击按钮,但我找不到进入的方法。

有什么方法可以点击“#tag_name”里面的按钮吗?

【问题讨论】:

    标签: python selenium web-crawler


    【解决方案1】:

    要访问 iframe 中的元素,您必须切换到该 iframe。
    如果这是页面上唯一可以使用的 iframe:

    driver.switch_to.frame(driver.find_element_by_xpath('//iframe'))
    

    如果那里有多个 iframe,您应该与其他网络元素类似地定位它们

    【讨论】:

    • 我明白了,但是要访问 iframe 中的任何元素,您首先必须切换到 iframe。
    【解决方案2】:

    这与我们为其他标签抓取 DOM 的方式非常相似。

    <html>
    <body>
    ....
    </body>
    </html>
    

    我们通常写成"//div[@tag-name="&lt;&lt;value&gt;&gt;"]"。非常相似,我们也执行帧。

    我们不是直接写来访问元素,而是切换到框架然后访问如下

    driver.switch_to_frame("<<frame id or frame name>>")
    driver.find_element(By.xpath, '//div[@tag-name="<<value>>"]').click()
    driver.switch_to.default_content()
    

    driver.switch_to_frame("<<frame id or frame name>>")
    element = driver.find_element_by_xpath("//div[@tag-name="<<value>>"]")
    element.click()
    driver.switch_to.default_content()
    

    【讨论】:

    • 如果 xpath 允许这种格式,我的问题可以写成 "//#document/div[@tag-name=">"]" ....
    • 不,它不允许这种格式。但是,要访问框架内的任何内容,总是要切换到它,然后根据需要执行其余的事情。就算是“#document”也没关系尝试切换到框架然后点击。让我们知道这是否有效
    • 它不起作用。内容在“#document”内,无法访问
    猜你喜欢
    • 2017-02-05
    • 2011-01-18
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2021-04-29
    相关资源
    最近更新 更多