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的属性值

 

posted @ 2020-09-06 14:21  sgdplus  阅读(33)  评论(0)    收藏  举报