记录在学习使用selenium过程中遇到的问题和方法
1.selenium学习手册
https://www.selenium.dev/zh-cn/documentation/
https://python-selenium-zh.readthedocs.io/zh_CN/latest/
https://www.selenium.dev/selenium/docs/api/py/index.html
2.selenium接管已经打开的浏览器
https://blog.csdn.net/qq254271304/article/details/103493969
打开cmd,在命令行中输入命令:
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"
对于-remote-debugging-port值,可以指定任何打开的端口。
对于-user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。
还有,不要忘了在环境变量中PATH里将chrome的路径添加进去。
例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress","127.0.0.1:9222")
chrome_driver="C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
print(driver.title)
3. ‘list’ object has no attribute 'click’问题
解决方法:将”driver.find_elements_by_xpath“改为“driver.find_element_by_xpath”即可解决。
https://blog.csdn.net/qq_34671951/article/details/85277252
4.select元素定位
二次定位:基本思路,先定位 select 框,再定位 select 里的选项
https://www.cnblogs.com/101718qiong/p/7929731.html
5.使用js改变hidden元素
js = 'document.getElementById("USER_PRIV0").value="112"'
driver.execute_script(js)
使用document.getElementsByName(“name”)获取元素的value值
getElementsByName是elements复数。
正确方法:
var x=document.getElementsByName("name")[0].value;
1、通过元素id属性,获取元素
document.getElementById('id');
2、通过元素name属性,获取元素列表
document.getElementsByName('name');
3、通过标签名,获取元素列表
document.getElementsByTagName('tag_name');
4、通过类名,获取元素列表
document.getElementsByClassName("class_name");
5、通过选择器,获取一个元素
document.querySelector("css selector")
6、通过CSS选择器,获取元素列表
document.querySelectorAll("css selector")
凡是列表都是复数,需要告诉是哪一个
https://www.cnblogs.com/qican/p/14037564.html
https://www.cnblogs.com/qican/p/13578969.html
6.针对JS的弹窗处理-警告框处理
获取弹出框文本:driver.switch_to.alert.text
点击确定:driver.switch_to.alert.accept()
点击取消:driver.switch_to.alert.dismiss()
设值:driver.switch_to.alert.send_keys()
7. 滚动页面函数execute_script
滚动到底部:window.scrollTo(0,document.body.scrollHeight)
滚动到顶部:window.scrollTo(0,0)
说明:
window:js的window对象
scrollTo():window的方法,可以滚到页面的任何位置
scrollHeight:是dom元素的通用属性,document.body.scrollHeight会返回body元素的高度,基本上就是页面的高度
scrollLeft:获取位于对象左边界和窗口目前可见内容的最左端之间的距离
scrollTop:获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象滚动的宽度
driver.execute_script("window.scrollTo(0,0);")
8.selenium获取元素
获取元素对应的HTML
获取整个元素对应的HTML文本内容
element.get_attribute('outerHTML')
获取元素内部的HTML文本内容
element.get_attribute('innerHTML')
获取输入框里面的文字
对于input输入框的元素,要获取里面的输入文本,用text属性是不行的,这时可以使用 element.get_attribute('value')
获取元素文本内容2
正常使用element = wd.find_element_by_id("input1").text
获取,
通过WebElement对象的 text 属性,可以获取元素 展示在界面上的 文本内容。
但是,有时候,元素的文本内容没有展示在界面上,或者没有完全完全展示在界面上。 这时,用WebElement对象的text属性,获取文本内容,就会有问题。
#出现这种情况,可以尝试使用
element.get_attribute('innerText')
#或者
element.get_attribute('textContent')
selenium获取span的text
WebDriver 对象 选择元素的范围是 整个 web页面, 而WebElement 对象 选择元素的范围是 该元素的内部。
from selenium import webdriver
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')
wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')
element = wd.find_element_by_id('container')
spans = element.find_elements_by_tag_name('span')
for span in spans:
print(span.text)