selenium各种操作解析
Selenium本质上是一款自动化测试工具,主要用于测试Web应用。对动态网页(用JavaScript渲染的网页),这种抓取方式非常有效。
一、安装Selenium
进入开始菜单,搜索cdm,进入后pip install selenium即可
二、安装WebDriver
WebDriver是一个W3C规范,用于定义控制浏览器的API。只要某款浏览器实现了WebDriver API,就可以使用Selenium控制这款浏览器。所以安装EebDriver要分清是哪款浏览器的WebDriver。
例:安装ChromeDriver,这是ChromeDriver的官方下载网页(https://npm.taobao.org/mirrors/chromedriver/)。
Chrome分为Windows,Linux,Mac三个版本。下载和自己相符合的版本。若Chrome的版本是73.0.3683.86,则chromedriver的版本也要是73.0.3683.86。
下载后,得到的是一个可执行文件
可将chromedriver.exe放在PATH环境变量中下,这样任何路径都可以执行。也可以将chromedriver放到任何的目录,在运行时制定其目录即可。
三、使用chromedriver
1 from selenium import webdriver 2 browser = webdriver.Chrome('E://python/chromedriver.exe') 3 #设置环境变量可能出错,但放入路径一定无误。但路径需将'\'改为'/'
四、Selenium的使用方法
(1)打开浏览器
(2)获取浏览器的特定内容
(3)控制浏览器页面上的控件,例如向文本框中输入一个字符串
(4)关闭浏览器
主要功能:
1 from selenium import webdriver 2 browser = webdriver.Chrome('E://python/chromedriver.exe') 3 #设置环境变量可能出错,但放入路径一定无误。但路径需将'\'改为'/' 4 browser.get('https://www.jd.com/') 5 #打开京东首页 6 input = browser.find_element_by_id('key') 7 #用id的属性值查找搜索框 8 input.send_keys('Python') 9 #用send_keys向搜索框中输入Python文本 10 browser.close() 11 #关闭浏览器
五、查找节点
1.find_element开头的方法(最多只返回第一个符合条件的节点),如Xpath、CSS选择器、class属性、id属性、标签名等
2.find_elements开头的方法,返回列表,用法与前者相同
注意:这两种方法都是第一个参数选择查找的方法
六、节点交互
selenium可以和节点交互,也就是模拟浏览器的动作。例如,单击页面的某个按钮,在文本输入框中输入某个文本,都属于节点交互
1 input.click()
七、动作链
前面的交互动作是有特定执行对象,还有另外一类交互动作,它们没有特定的执行对象,比如鼠标拖拽、键盘按钮等。这些需要另一种方式执行,这就是动作链
1.模拟鼠标移动(move_to_element)
1 action = ActionChains(browser) 2 #创建ActionChains对象 3 input = browser.find_elements_by_class_name('cate_menu_item') 4 for i in input: 5 action.move_to_element(i).perform() 6 #一定要用perfrom方法才能生效 7 time.sleep(1)
2.将一个节点拖到另一个节点上(drag_and_drop)
1 first = browser.find_element_by_class_name('navitems-lk') 2 second = browser.find_element_by_class_name('text') 3 action.drag_and_drop(first,second) 4 #用drap_and_drop方法拖到节点 5 action.perform() 6 #要调用peform方法才有用
八、执行JavaScript代码
对于有些操作,selenium并没有提供相应的API,例如下拉页面,但可以使用selenium的execute_script方法直接运行JavaScript代码
1 browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') 2 #将页面滚动到最低端 3 browser.execute_async_script('alert("已到达页面低端")') 4 #弹出对话框
九、获取节点信息
1 input = browser.find_elements_by_class_name('cate_menu_lk') 2 for i in input: 3 print(i.text) 4 #获取节点文本 5 print(i.id) 6 #输出节点内部使用的id,注意:不是id属性值 7 print(i.location) 8 #输出节点的位置 9 print(i.tag_name) 10 #输出节点名称 11 print(i.size) 12 #输出节点的尺寸 13 browser.close()
十、管理cookies
使用selenium,可以方便的管理cookie,例如获取cookie,添加和删除cookie等
1 print(browser.get_cookies()) 2 #获取cookies列表 3 browser.add_cookie({'name':'name','attrs':'attrs'}) 4 #添加新的cookie 5 browser.delete_all_cookies() 6 #删除所有cookie
十一、改变节点的属性值
selenium本身没有提供修改节点属性的API,不过可以通过执行JavaScript代码的方式设置节点属性,而且通过selenium获取的节点可以直接作为DOM使用,这就意味着可以直接在JavaScript代码中使用查找到的节点。execute_script方法的第一个参数用于指定JavaScript代码,后面的可变参数,可以为JavaScript代码传递参数。通过arguments变量获取每个参数值,例如arguments【0】表示第一个参数值。
1 a1 = browser.find_element_by_class_name('navitems-lk') 2 a2 = browser.find_element_by_class_name('cate_menu_lk') 3 js = ''' 4 arguments[0].text = '标题' 5 arguments[0].href = 'https://i.cnblogs.com/articles/edit' 6 arguments[1].text = '时间' 7 arguments[1].href = 'https://www.hao123.com/' 8 ''' 9 browser.execute_script(js,a1,a2) 10 #用js代码改变a1和a2的属性值

浙公网安备 33010602011771号