当前位置:   article > 正文

Web自动化Selenium-JavaScript的应用_selenium获取span内文字

selenium获取span内文字

JavaScript是Web页面的编程语言。Selenium提供了execute_script方法,用来执行JavaScript,从而完成一些特殊的操作。

操作页面元素

我们可以借助JavaScript操作页面元素,如在搜索框中输入文字、单击按钮等

  1. from selenium import webdriver
  2. from time import sleep
  3. driver = webdriver.Chrome()
  4. driver.get('https://www.baidu.com/')
  5. ele1JS = "document.getElementById('kw').value='storm'"
  6. ele2JS = "document.getElementById('su').click()"
  7. driver.execute_script(ele1JS)
  8. sleep(3)
  9. driver.execute_script(ele2JS)
  10. sleep(3)
  11. driver.quit()

 修改页面元素属性

当遇到某input型日期时间控件包含readonly属性时,我们是无法通过send_keys去选择日期时间的,这时候我们需要借助JavaScript来删除掉readonly属性,从而达到允许输入的目的。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>日期时间控件</title>
  6. </head>
  7. <body>
  8. <input type="date" name="name1" id="id1" readonly>
  9. </body>
  10. </html>

 

  1. from selenium import webdriver
  2. from time import sleep
  3. import os
  4. driver = webdriver.Chrome()
  5. html_file = 'File:///' + os.getcwd() + os.sep + 'myhtml7_2.html'
  6. driver.get(html_file)
  7. sleep(2)
  8. js2 = "document.getElementById('id1').removeAttribute('readonly')"
  9. driver.execute_script(js2)
  10. driver.find_element_by_tag_name('input').send_keys('002020/06/06')
  11. sleep(5)
  12. driver.quit()

再提供以下几种删除元素属性的方法 

  1. # js = "document.getElementById('c-date1').removeAttribute('readonly')" # 原生js,移除属性
  2. # js = "$('input[id=c-date1]').removeAttr('readonly')" # jQuery,移除属性
  3. # js = "$('input[id=c-date1]').attr('readonly',False)" # jQuery,设置为False
  4. # js = "$('input[id=c-date1]').attr('readonly','')" # jQuery,设置为空

 操作滚动条

在实际项目中,某些Web页面内容过长会出现滚动条。当我们操作当前滚动条页面范围以外的元素时可能会报错,这时候就需要使用Selenium操作滚动条到指定位置。

(1)借助JavaScript操作纵向滚动条

  1. from selenium import webdriver
  2. from time import sleep
  3. driver = webdriver.Chrome()
  4. # driver = webdriver.Firefox()
  5. driver.get("http://www.baidu.com")
  6. driver.find_element_by_id('kw').send_keys("storm")
  7. driver.find_element_by_id('su').click()
  8. js1 = "window.scrollTo(0, document.body.scrollHeight)"# 滑动滚动条到底部
  9. js2 = "window.scrollTo(0,0)"# 滑动到顶端
  10. js3 = "window.scrollTo(0,200)"# 向下滑动200像素
  11. js4 = "arguments[0].scrollIntoView();" # 滑动到指定元素
  12. sleep(2) #等待页面加载完,注意观察滚动条目前处于最上方
  13. driver.execute_script(js1) #执行js1,将滚动条滑到最下方
  14. sleep(2) #加等待时间,看效果
  15. driver.execute_script(js2) #执行js2,将滚动条滑到最上方
  16. sleep(2) #加等待时间,看效果
  17. driver.execute_script(js3) #执行js3,将滚动条向下滑动到200像素
  18. sleep(2) #加等待时间,看效果
  19. driver.execute_script(js2) #执行js2,将滚动条滑到最上方
  20. sleep(2)
  21. ele = driver.find_element_by_id('con-ar') #定位一个元素
  22. driver.execute_script(js4,ele) #滑动到上面定位的元素的地方
  23. sleep(2)
  24. driver.quit()

 (2)借助JavaScript操作横向滚动条

  1. from selenium import webdriver
  2. from time import sleep
  3. driver = webdriver.Chrome()
  4. # driver = webdriver.Firefox()
  5. driver.get("http://www.baidu.com")
  6. driver.find_element_by_id('kw').send_keys("storm")
  7. driver.find_element_by_id('su').click()
  8. driver.set_window_size(500,500) #缩小浏览器窗口,使之出现横向滚动条
  9. js5 = "window.scrollTo(document.body.scrollWidth,0)"
  10. js6 = "window.scrollTo(0,0)"
  11. js7 = "window.scrollTo(200,0)"
  12. driver.execute_script(js5) #滑动到最右边
  13. sleep(2)
  14. driver.execute_script(js6) #滑动到最左边
  15. sleep(2)
  16. driver.execute_script(js7) #向右滑动200像素
  17. sleep(2)
  18. driver.quit()

 (3)操作内嵌滚动条内嵌滚动条一般嵌在一个iframe里面,先切换到要操作的滚动条所在的iframe,然后正常调用JavaScript即可。

  1. from selenium import webdriver
  2. from time import sleep
  3. driver = webdriver.Chrome()
  4. # driver = webdriver.Firefox()
  5. driver.get("http://sahitest.com/demo/iframesTest.htm")
  6. sleep(2)
  7. driver.switch_to.frame(1)
  8. js5 = "window.scrollTo(0,200)"
  9. driver.execute_script(js5) #向下滑动200像素
  10. sleep(2)
  11. driver.quit()

●使用window.scrollTo(x,y)这一语句可以实现所有的纵向或横向滑动滚动条。其中x为横坐标,y为纵坐标,如想纵向滑动200像素,语句就是window.scrollTo(0,200)。

●获取当前窗口的宽度和高度分别可以用document.body.scrollWidth和document.body.scrollHeight语句实现。

●滑动到指定元素位置可以用arguments[0].scrollIntoView(),arguments[0]是指第一个传参。

高亮显示正在被操作的页面元素

测试过程中,我们可以借助JavaScript高亮显示正在被操作的元素。 

  1. def highLightElement(driver,element):
  2. '''
  3. #封装高亮显示页面元素的方法:使用js代码将页面元素对象的背景颜色设置为绿色,边框设置为红色
  4. :param driver:
  5. :param element:
  6. :return:
  7. '''
  8. driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element, "background: green; border: 2px solid red;")
  9. if __name__ == '__main__':
  10. from selenium import webdriver
  11. from time import sleep
  12. driver = webdriver.Chrome()
  13. driver.get('https://www.baidu.com/')
  14. ele = driver.find_element_by_id('kw')
  15. highLightElement(driver, ele)
  16. sleep(3)
  17. driver.quit()

操作span类型元素

实际项目中可能会遇到span类型元素,针对此类型元素,有一些特殊的操作 

 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>span类型元素测试</title>
  6. </head>
  7. <body>
  8. <span id="span_id">span的文本</span>
  9. </body>
  10. </html>

(1)通过id来定位元素,获取span的文本

  1. from selenium import webdriver
  2. import os
  3. '''
  4. 定位元素,通过text取文本
  5. '''
  6. driver = webdriver.Chrome()
  7. html_file = 'File:///' + os.getcwd() + os.sep + 'myhtml7_3.html'
  8. driver.get(html_file)
  9. ele = driver.find_element_by_id('span_id')
  10. print(ele.text)
  11. driver.quit()

 (2)通过JavaScript修改标签的文本

  1. from selenium import webdriver
  2. from time import sleep
  3. import os
  4. '''
  5. 通过js的方式修改span中间的值
  6. js = 'document.getElementById("span_id").innerText="aaaa"'
  7. '''
  8. driver = webdriver.Chrome()
  9. html_file = 'File:///' + os.getcwd() + os.sep + 'myhtml7_3.html'
  10. driver.get(html_file)
  11. sleep(2)
  12. js1 = "document.getElementById('span_id').innerText='aaa'"
  13. driver.execute_script(js1)
  14. sleep(2)
  15. driver.quit()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/867900
推荐阅读
相关标签
  

闽ICP备14008679号