环境
- pip install selenium
- 下载浏览器对应的driver,chromedriver地址:http://chromedriver.storage.googleapis.com/index.html,注意需要和自己的浏览器版本一致,地址栏输入chrome://version/即可查看,下载解压后的driver文件需要放到PATH路径中
打开一个页面
import selenium.webdriver
browser = selenium.webdriver.Chrome()
browser.get("https://www.jianweidata.com/Index")
获取指定元素
element = browser.find_element_by_xpath('//*[@id="app"]/div[2]/div/ul/li[1]/span')
print(element.text)
#获取元素的属性,href height class等
print(element.get_attribute("class"))
简单说一下xpath的语法:
//a #表示所有a标签元素
//* #就是所有元素
//*[@class="app"] #就是class属性为app的所有元素
//*[@class="app"]/div[2] #就是class属性为app的所有元素下的第二个div
#可以在浏览器网页上右键检查,到网页源码,右键 复制指定元素的xpath
#可以通过浏览器的扩展插件验证你的xpath是否正确,浏览器->自定义及控制->更多工具->扩展程序,然后搜索xpath选一个即可
鼠标移动到指定元素上
from selenium.webdriver import ActionChains
ac = ActionChains(browser)
ac.move_to_element(element)
#睡眠是为了页面能响应上一个动作,比如下拉列表等
time.sleep(3)
ac.click_and_hold(bs.find_element_by_xpath('//*[@id="app"]/div[2]/div/ul/li[1]/div/a[1]')).release()
ac.perform() #执行action chains中存储的动作,最后必须执行这句
其他鼠标动作
- move_by_offset(xoffset, yoffset) 鼠标移动到坐标位置
- move_to_element_with_offset(to_element, xoffset, yoffset) 移动到元素偏移位置
- click(on_element=None) 鼠标单击
- click_and_hold(on_element=None) 鼠标单击并且按住不放
- release() 鼠标松开
- context_click(on_element=None) 右击
- double_click(on_element=None) 双击
- drag_and_drop(source, target) 拖拽到指定元素处
- drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到指定位置
- key_down(value, element=None) 按住某个键,使用这个方法可以方便的
键盘操作
- key_up(value, element=None) 松开某个键,可以配合上面的方法实现按下Ctrl+c并且释放。
- send_keys(*keys_to_send) 向某个元素位置输入值
- send_keys_to_element(element, *keys_to_send) 向指定的元素输入数据
键盘输入
#输入框输入
from selenium.webdriver.common.keys import Keys
browser.find_element_by_xpath('//*[@id="username"]').send_keys("admin")
bs.find_element_by_xpath('//*[@id="password"]').send_keys("12345678", Keys.ENTER)#输入密码并回车
#Keys中有各种控制字符,方便使用
等待元素出现
from selenium.webdriver.support.wait import WebDriverWait
# 最多等10s,轮询间隔默认0.5s
elements = WebDriverWait(browser, 10).until(
lambda b: b.find_elements(by=By.XPATH, value='//*[@id="rso"]/div/div/div[2]/div/span'))