我正在尝试抓取我感兴趣的页面。为此,我需要从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]的角色吗?
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")
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]
您正在调用此方法。
根据文档,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的引用