1、 要使用selenium首先导入webdriver
2、 生成浏览器对象 driver = webdriver.PhantomJS()
3、 driver.get(url)方法:加载指定页面,阻塞方式直到加载完成
4、 driver.find_element_by_id(elemid)方法:获取页面指定 id 的标签
5、 driver.title:页面标题
6、 driver.page_source:页面源码
7、 driver.get_cookies():获取页面 coolies
8、 driver.save_screenshot(filename): 保存当前页面快照
9、 driver.find_element_by_id("kw").send_keys("奇酷信息"):指定元素设置 value, 通常用于 input field
10、 driver.find_element_by_id("su").click()模拟点击,通常用于按钮
11、 driver.find_element_by_id("kw").clear(): 清除输入框内容
12、 driver.quit():关闭浏览器
定位UI元素 (WebElements)
单个元素查找
find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
多个元素查找
find_elements_by_name
find_elements_by_id
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
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) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左 上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
模拟练习:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Chrome(executable_path="D:\Google\Chrome\Application\chromedriver.exe")
driver.implicitly_wait(10)
driver.maximize_window()
# 模拟点击事件(点击百度知道的那个搜索答案)
driver.get('https://zhidao.baidu.com/')
click_btn = driver.find_element_by_xpath('//button[@id="search-btn"]').click()
#模拟鼠标移动(拖到头像,让头像展开)
driver.get('https://zhidao.baidu.com/')
write = driver.find_element_by_xpath('//div[@class="cover animate"]')
action = ActionChains(driver)
action.move_to_element(write).perform() # 移动到 write,显示“Mouse moved”
模拟百度知道验证码登录
from PIL import Image
import pytesseract
from urllib import request
driver.get("https://zhidao.baidu.com")
proxy = {'http': '123.56.169.22:3128'}
# 创建 ProxyHandler
proxy_support = request.ProxyHandler(proxy)
# 创建 Opener
opener = request.build_opener(proxy_support)
login = driver.find_element_by_id('userbar-login').click()
username = driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
driver.find_element_by_id("TANGRAM__PSP_10__userName").clear()
driver.find_element_by_id("TANGRAM__PSP_10__userName").send_keys(15617391675)
driver.find_element_by_id("TANGRAM__PSP_10__password").clear()
driver.find_element_by_id("TANGRAM__PSP_10__password").send_keys("011852zz")
import time
time.sleep(2)
driver.save_screenshot('./images/baidu.png')
element=driver.find_element_by_xpath('//span[@id="TANGRAM__PSP_10__verifyCodeImgParent"]/img[1]')
#location办法可能会有偏移,但是每次都会锁定了了验证码的位置,所以稍微修正一下location的定位,后面都管用
left = element.location['x']#验证码图片左上角横坐标
top = element.location['y']#验证码图片左上角纵坐标
right = left + element.size['width']#验证码图片右下角横坐标
bottom = top + element.size['height']#验证码图片右下角纵坐标
im=Image.open('./images/baidu.png')
im_crop=im.crop((left,top,right,bottom))#这个im_crop就是从整个页面截图中再截出来的验证码的图片
im_crop.save('./images/logo.png')
img =Image.open('./images/logo.png')
img.show()
#可以看出,验证码文本一般都是黑色的,背景则会更加明亮,所以我们可以通过检查像素是否为黑色将文本分离出来,该处理过程又被称为阈值化。通过 Pillow 可以很容易地实现该处理过程。
gray = img.convert('L') #灰度化
gray.show()
import tesserocr
result = tesserocr.image_to_text(gray)
print(result)
# print(pytesseract.image_to_string(gray))
# driver.find_element_by_id("TANGRAM__PSP_10__verifyCode").clear()
# driver.find_element_by_id("TANGRAM__PSP_10__verifyCode").send_keys(result)
# sleep(10)
# click_name = driver.find_element_by_id("TANGRAM__PSP_10__submit")
# click_name.click()
# s1 = Select(driver.find_element_by_id('user-name'))