如何在selenium python中使用javascript

2024-10-06 10:31:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pythonselenium执行javascript。我基本上是想用execute.script来设置这个值,但不知为什么它什么都没有做。我想编辑你看到的街道地址

execute_script(driver, """var element = document.getElementsByClassName('input[ng-model="formData.address.address1"]'); element.value = '328 91st Street'; """)

enter image description here

有谁能告诉我这里有什么问题吗?我也没有收到错误


Tags: 编辑inputexecutemodelvar地址driverscript
2条回答

这段代码差不多可以走了。。。在

execute_script(driver, """var element = document.getElementsByClassName('input[ng-model="formData.address.address1"]'); element.value = '328 91st Street'; """)

请记住,getElementsByClassName将返回一个数组。。。在

我想你应该使用querySelectorquerySelectorAll函数。。。在

// will select just one element 
var element = document.querySelector('input[ng-model="formData.address.address1"]'); 

// will select all elements
var element = document.querySelectorAll('input[ng-model="formData.address.address1"]'); 

getElementsByClassName你应该通知一个类。。。(我认为很难有这样的类:ng-model="formData.address.address1"

使用querySelector

var element = document.querySelector('input[ng-model="formData.address.address1"]');element.value = '328 91st Street';//Work!!!

如果您想用querySelectorAll

在这些节点列表中迭代

基本上

var element = document.querySelectorAll('input[ng-model="formData.address.address1"]');element.value = '328 91st Street';//WON'T WORK

改为:

var element = document.querySelectorAll('input[ng-model="formData.address.address1"]');element[0].value = '328 91st Street'; // change the value for the first element

for(int i = 0 ;i<element.length;i++){ //change all elements
   element[i].value =  '328 91st Street';
}

有一种更可靠的方法来实现这一点:使用CSS选择器定位selenium元素,并将WebElement以及一个值作为参数传递到脚本中:

elm = driver.find_element_by_css_selector('input[ng-model="formData.address.address1"]')
value = '328 91st Street'

driver.execute_script("arguments[0].value = 'arguments[1]';", elm, value)

请注意,在代码中,有两个主要问题:

  • 您正在向getElementsByClassName()调用传递一个CSS选择器-相反,它要求您将类名作为字符串传递
  • getElementsByClassName()返回元素数组,而不是单个元素

相关问题 更多 >