繁体   English   中英

Python selenium,如何删除元素?

[英]Python selenium, how can i delete an element?

在过去的一个小时里,我一直在尝试删除一个元素,但没有成功。 并且元素只能通过类名访问。 我试过了:

js = "var aa=document.getElementsByClassName('classname')[0];aa.parentNode.removeChild(aa)"
driver.execute_script(js)

我收到未定义 parentNode 的错误。

那么使用 Selenium 删除元素的最佳方法是什么?

我不知道专门为删除元素而设计的Selenium方法。 但是,你可以用:

element = driver.find_element_by_class_name('classname')
driver.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", element)

如果元素不存在, find_element_by_class_name将引发异常。 因此,您不必测试element是否设置为合理的值。 如果方法返回,则设置。 然后将元素传递回execute_script 传递给Python中的execute_scriptarguments在JavaScript中作为arguments对象出现。 (它与您通常使用任何JavaScript函数获得的arguments对象相同。在幕后,Selenium将JavaScript代码包装在一个匿名函数中。)

或者您可以使用依赖JavaScript的解决方案来查找元素:

driver.execute_script("""
var element = document.querySelector(".classname");
if (element)
    element.parentNode.removeChild(element);
""")

如果您碰巧使用远程服务器来运行测试(如Sauce Labs或BrowserStack),则此解决方案要好得多 Selenium客户端和服务器之间的通信成本不可忽略。

getElementByClassName不是document上的方法。 你会想要使用

getElementsByClassName('classname')[0]...

但只有你确定它是唯一一个有这个班级的人。

感谢路易斯的投入。 我构建了以下使用您建议的 JavaScript 的 python 函数:

def excludeTagFromWebDriver(driver : WebDriver, selector : str):
    i = 0
    soup = BeautifulSoup(driver.page_source, 'html.parser') # Parsing content using beautifulsoup
    while soup.find(selector):
        # print(soup.find(selector))
        js = """
            var element = document.querySelector(""" + "'" + selector + "'" + """);
            if (element)
                element.parentNode.removeChild(element);
            """
        driver.execute_script(js)
        soup = BeautifulSoup(driver.page_source, 'html.parser') # Parsing content using beautifulsoup
        i += 1
        # print('Removed tag with selector ' + "'" + selector + "'" + ' with nr: ', i)
    print('Removed ' + str(i) + ' tags with the selector ' + "'" + selector + "'" + " and all it's children tags.")
    return driver

driver = excludeTagFromWebDriver(driver,"sup")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM