selenium库学习笔记(一)
selenium页面交互
打开网页:
1 import time 2 from selenium import webdriver 3 4 driver = webdriver.Chrome() 5 6 driver.get('https://www.baidu.com') 7 8 try: 9 driver.save_screenshot('01.png') 10 except Exception as e: 11 print(e) 12 finally: 13 time.sleep(5) 14 driver.close()
网页定位:
我们可以根据ID,class等去定位:
在一个页面中有很多不同的策略可以定位一个元素。我们可以选择最合适的方法去查找元素。Selenium提供了下列的方法:
单个元素:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text 定位那些网页上点击按钮(以文本定位;超链接跳转那种)
find_element_by_class_name
find_element_by_css_selector
多个元素:
find_elements_by_id ... 与上面是一样的
1 import time 2 from selenium import webdriver 3 driver = webdriver.Chrome() 4 5 driver.get('https://www.baidu.com') 6 7 try: 8 driver.find_element_by_id('kw').send_keys('python') 9 except Exception as e: 10 print(e) 11 finally: 12 time.sleep(5) 13 driver.close()
上面的代码定位了百度的输入框并输入‘python’。
定位一些点击按钮:
1 driver = webdriver.Chrome() 2 3 driver.get('https://www.baidu.com') 4 print(driver.page_source) 5 6 try: 7 driver.find_element_by_link_text('贴吧').click() 8 except Exception as e: 9 print(e) 10 finally: 11 time.sleep(5) 12 driver.close()
1 driver = webdriver.Chrome() 2 3 driver.get('https://www.baidu.com') 4 5 try: 6 driver.find_element_by_id('kw').send_keys('python') 7 driver.find_element_by_id('su').click() 8 time.sleep(2) 9 driver.find_element_by_xpath('//*[@id="1"]/h3/a[1]').click() 10 except Exception as e: 11 print(e) 12 finally: 13 time.sleep(5) 14 driver.close()
网页是拖动操作:
在selnium当中除了简单的点击动作之外,还有一些稍微复杂动作如元素的拖拽。在实现元素拖拽的时候需要使用另外一个模块。
ActionChains这个模块基本可以满足我们对鼠标操作的需求。ActionChains的执行原理就是当调用ActionChains方法的时候不会立即
执行,而是将所有的操作暂时存储在一个队列中,当调用perform()的方法时候,队列会按照放入的先后顺序依次执行。ActionChains
提供的方法
click(on_element=None) #单击鼠标左键
click_and_hold(on_element=None) #点击鼠标左键,按住不放
context_click(on_element=None) #点击鼠标右键
double_click(on_element=None) #双击鼠标左键
drag_and_drop(source, target) #拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset)#拖拽到某个坐标然后松开
move_by_offset(xoffset, yoffset) #鼠标移动到距离当前位置(x,y)
move_to_element(to_element) #鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) #将鼠标移动到距某个元素多少距离的位置
release(on_element=None) #在某个元素位置松开鼠标左键
perform() #执行链中的所有动作
1 # 拖动 2 import time 3 from selenium import webdriver 4 from selenium.webdriver.common.action_chains import ActionChains 5 driver = webdriver.Chrome() 6 7 driver.get('http://www.treejs.cn/v3/demo/cn/exedit/drag.html') 8 time.sleep(1) 9 element = driver.find_element_by_id('treeDemo_5_span') 10 target = driver.find_element_by_id('treeDemo_16_span') 11 ActionChains(driver).drag_and_drop(element, target).perform() 12 time.sleep(5) 13 driver.close()
弹窗操作:
1 import time 2 from selenium import webdriver 3 driver = webdriver.Chrome() 4 5 driver.get('http://localhost:63342/05-0413-selenium+phantomjs/007.html?_ijt=832csv0vkrd2eq97f21rt06hvd') 6 time.sleep(1) 7 driver.switch_to_alert() 8 time.sleep(2) 9 driver.close()
弹窗的html代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script>alert('hello')</script> </body> </html>