什么是通过Selenium和Python通过WebDriver实例调用execute_script()方法时的参数[0]?

问题描述 投票:1回答:3

我正在尝试抓取我感兴趣的页面。为此,我需要从HTML中删除元素的属性。 'style'是我想删除的。所以我从Stackoverflow中找到了一些代码。(我正在使用Chrome驱动程序)

element = driver.find_element_by_xpath("//select[@class='m-tcol-c' and @id='searchBy']")
driver.execute_script("arguments[0].removeAttribute('style')", element)

参数[0]在代码中做了什么?任何人都可以具体解释论证[0]的角色吗?

javascript python selenium selenium-webdriver webdriver
3个回答
1
投票

arguments是你想要执行的从Python传递到JavaScript的东西。

driver.execute_script("arguments[0].removeAttribute('style')", element) 

意味着你想要用存储在arguments[0]变量中的WebElement“替换”element

这与在JavaScript中定义该元素的情况相同:

driver.execute_script("document.querySelector('select.m-tcol-c#searchBy').removeAttribute('style')")

您还可以传递更多参数

driver.execute_script("arguments[0].removeAttribute(arguments[1])", element, "style")

1
投票
element = driver.find_element_by_xpath("//select[@class='m-tcol-c' and @id='searchBy']")  

这里,element是一个web元素。

在这个电话中:

driver.execute_script("arguments[0].removeAttribute('style')", element)  

你传递元素(这是一个web元素)作为arguments[0]

removeAttribute('style')必须是JS中的一种方法。并使用arguments[0]您正在调用此方法。


0
投票

根据文档,execute_script()方法在当前窗口/框架中同步执行JavaScript,定义如下:

execute_script(script, *args)
    Synchronously Executes JavaScript in the current window/frame.
    Where:
        script: The JavaScript to execute.
        *args: Any applicable arguments for your JavaScript.
  • 根据您提供的示例: element = driver.find_element_by_xpath("//select[@class='m-tcol-c' and @id='searchBy']") driver.execute_script("arguments[0].removeAttribute('style')", element)
  • arguments[0].removeAttribute('style'):指由execute_script()方法同步执行的脚本,其中: arguments[]将是通过*args传递的元素的参考 removeAttribute()是要执行的方法。 style是调用removeAttribute()方法的属性。
  • element是传递给arguments[0]的WebElement的引用
© www.soinside.com 2019 - 2024. All rights reserved.