#-*- coding: utf-8 -*-#安装:pip3 install selenium#下载chromdriver.exe放到python安装路径的scripts目录中即可,注意最新版本是3.5#国内镜像网站地址:http://npm.taobao.org/mirrors/chromedriver/3.5#最新的版本去官网找:https://sites.google.com/a/chromium.org/chromedriver/downloads#验证安装
from selenium importwebdriver#driver = webdriver.Chrome()       #弹出浏览器#driver.get("https://www.baidu.com")    #浏览器自动访问该url#print(driver.page_source)              #终端打印获取到的urltext文件#安装:pip3 install selenium#下载phantomjs,解压后把phantomjs.exe所在的bin目录放到环境变量#下载链接:http://phantomjs.org/download.html#drivers = webdriver.PhantomJS(executable_path=r"E:\python\phantomjs-2.1.1-windows\bin\phantomjs.exe") #无界面浏览器# 环境变量配置之后就可以不用加里面的参数,但是不知道什么原因pycharm识别不了,只能手动吧目录填写进去#drivers.get('https://www.baidu.com')#print(drivers.page_source)#基本使用
from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By       #查找方式:ID,class
from selenium.webdriver.common.keys import Keys   #键盘操作,enter
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait    #等待页面加载某些元素
browser=webdriver.Chrome()try:browser.get("https://www.baidu.com")              #访问这个页面input_tag = browser.find_element_by_id("kw")      #找到搜索框IDinput_tag.send_keys("极致诱惑")                    #给搜索框添加搜索条件input_tag.send_keys(Keys.ENTER)                   #模仿人手动敲击回车键wait = WebDriverWait(browser,10)                  #等待10秒wait.until(EC.presence_of_element_located((By.ID,"content_left--")))    #等待十秒,知道等到content_left--加载出来,print("browser.page_source",browser.page_source)print("browser.current_url",browser.current_url)print("browser.get_cookie()",browser.get_cookie)finally:browser.close()#最后得关闭

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait importWebDriverWaitimporttimedriver=webdriver.Chrome()
driver.get("https://www.baidu.com")
wait= WebDriverWait(driver,5)try:#===============所有方法===================#1、find_element_by_id#2、find_element_by_link_text#3、find_element_by_partial_link_text#4、find_element_by_tag_name#5、find_element_by_class_name#6、find_element_by_name#7、find_element_by_css_selector#8、find_element_by_xpath################################################################1、find_element_by_id#print(driver.find_element_by_id("kw"))#2、find_element_by_link_text#login = driver.find_elements_by_link_text("登录")[0]#login.click()#3、find_element_by_partial_link_textlogin = driver.find_elements_by_partial_link_text("")[0]login.click()#4、find_element_by_tag_name#print(driver.find_element_by_tag_name("a"))#5、find_element_by_class_namebutton=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))button.click()print("============")#6、find_element_by_nameinput_user = wait.until(EC.presence_of_element_located((By.NAME,"userName")))input_pwd= wait.until(EC.presence_of_element_located((By.NAME,"password")))commit= wait.until(EC.element_to_be_clickable((By.ID,"TANGRAM__PSP_10__submit")))input_user.send_keys("xxxxxxxxx")       #输入框输入用户名input_pwd.send_keys("xxxxxxxxx")        #密码框输入密码
commit.click()time.sleep(4)finally:driver.close()

自动登录百度账号

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait importWebDriverWaitimporttimedriver=webdriver.Chrome()
driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')
driver.implicitly_wait(3)         #有些文件加载比较缓慢,在加载之前等待try:driver.find_element_by_xpath("//a")     #从根目录下找子子孙孙,找不到报错#driver.find_element_by_xpath("//body/a") #从根目录body先找他的儿子,找不到爆粗driver.find_element_by_xpath("//body//a") #从body下的子子孙孙找a,res1 = driver.find_element_by_xpath("//body//a[3]")   #取第一个a标签,标签按1开始print(res1.text)r2= driver.find_element_by_xpath("//a[3]")print(r2.text)r3= driver.find_element_by_xpath('//*[@id="images"]/a[3]')print(r3.text)#r1,r2,r3 的结果是相同的res4 = driver.find_elements_by_xpath("/html/body/div/a")[3]print(res4.text)res5= driver.find_element_by_xpath('//a[img/@src="data:image3_thumb.jpg"]')print(res5.text)finally:driver.close()

xpath的基本使用

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
browser =webdriver.Chrome()
browser.get("https://www.amazon.cn")
wait= WebDriverWait(browser,10)
wait.until(EC.presence_of_all_elements_located((By.ID,"cc-lm-tcgShowImgContainer")))
tag= browser.find_element(By.CSS_SELECTOR,"#cc-lm-tcgShowImgContainer img")print(tag.get_attribute("src"))print(tag.id)print(tag.location)print(tag.tag_name)print(tag.size)
browser.close()

获取标签属性

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By  #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait  #等待页面加载某些元素
importtime
driver=webdriver.Chrome()
driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')#wait = WebDriverWait(driver,3)
driver.implicitly_wait(3)try:driver.switch_to.frame("iframeResult")drop= driver.find_element_by_id("droppable")     #不懂drag = driver.find_element_by_id("draggable")     ##移动方块#方式一:#actions = ActionChains(driver)          #拿到动作连对象#actions.drag_and_drop(drop,drag)#actions.perform()#time.sleep(4)#方式二
ActionChains(driver).click_and_hold(drag).perform()distance= drop.location["x"] - drag.location["x"]    #获取到两者之间的距离track =0while track <distance:ActionChains(driver).move_by_offset(xoffset=2,yoffset=0).perform()track+=2ActionChains(driver).release().perform()time.sleep(10)finally:driver.close()

actionchains

等待元素加载
#1、selenium只是模拟浏览器的行为,而浏览器解析页面是需要时间的(执行css,js),一些元素可能需要过一段时间才能加载出来,为了保证能查找到元素,必须等待#2、等待的方式分两种:
隐式等待:在browser.get('xxx')前就设置,针对所有元素有效
显式等待:在browser.get('xxx')之后设置,只针对某个元素有效

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
browser=webdriver.Chrome()#隐式等待:在查找所有元素时,如果尚未被加载,则等10秒
browser.implicitly_wait(10)browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw')
input_tag.send_keys('美女')
input_tag.send_keys(Keys.ENTER)contents=browser.find_element_by_id('content_left') #没有等待环节而直接查找,找不到则会报错
print(contents)browser.close()

隐式等待

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw')
input_tag.send_keys('美女')
input_tag.send_keys(Keys.ENTER)#显式等待:显式地等待某个元素被加载
wait=WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By.ID,'content_left')))contents=browser.find_element(By.CSS_SELECTOR,'#content_left')print(contents)browser.close()

显示等待

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
browser=webdriver.Chrome()
browser.get("https://www.taobao.com/")
wait= WebDriverWait(browser,10)#input_tag = browser.find_element_by_id("q")#input_tag.send_keys("情趣用品")#button = browser.find_element_by_class_name("btn-search")#button.click()
input_tag = wait.until(EC.presence_of_element_located((By.ID,"q")))
input_tag.send_keys("情趣用品")
button= wait.until(EC.presence_of_element_located((By.CLASS_NAME,"btn-search")))
button.click()importtime
time.sleep(3)
input_tag= browser.find_element_by_id("q")
input_tag.clear()
input_tag.send_keys("iphone9")
button= browser.find_element_by_class_name("btn-search")
button.click()

自动搜索,二次跳转

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素try:browser=webdriver.Chrome()browser.get("https://www.baidu.com")browser.execute_script("alert(6666)")importtimetime.sleep(3)finally:browser.close()

手动写js

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素#frame相当于一个单独的网页,在父frame里是无法直接查看到子frame的元素的,必须switch_to_frame切到该frame下,才能进一步查找
try:browser=webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')browser.switch_to.frame("iframeResult")tag1= browser.find_element_by_id("droppable")print(tag1)browser.switch_to.parent_frame()tag2= browser.find_element_by_id("textareaCode")print(tag2)finally:browser.close()#先切换到iframe里找标签,然后切换到父母版中找标签

iframe切换问题

importtimefrom selenium importwebdriver
browser=webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.get("https://www.taobao.com")
browser.get("https://www.sina.com.cn/")browser.back()#后退
time.sleep(12)
browser.forward()#前进
time.sleep(12)
browser.close()#访问顺序;首先访问百度,淘宝,新浪,然后返回淘宝,12秒后前进到新浪,12秒后关闭浏览器

模拟浏览器前进后退

#cookies#from selenium import webdriver# #browser=webdriver.Chrome()#browser.get('https://www.zhihu.com/explore')#print(browser.get_cookies())#browser.add_cookie({'k1':'xxx','k2':'yyy'})#print(browser.get_cookies())# ## browser.delete_all_cookies()

cookie操作

importtimefrom selenium importwebdriver
browser=webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.execute_script("window.open()")print(browser.window_handles)
browser.switch_to.window(browser.window_handles[1])
browser.get("https://www.taobao.com")
time.sleep(10)
browser.switch_to.window(browser.window_handles[0])
browser.get("https://www.sina.com.cn")
browser.close()#先访问百度页面,然后打开新的选项卡,跳转到新的选项卡,访问淘宝,10秒后跳转到第一个选项卡,访问新浪,关闭

选项卡切换操作

from selenium importwebdriverfrom selenium.common.exceptions importTimeoutException,NoSuchElementException,NoSuchFrameExceptiontry:browser=webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')browser.switch_to.frame('iframssseResult')exceptTimeoutException as e:print(e)exceptNoSuchFrameException as e:print(e)finally:browser.close()

异常处理


#-*- coding: utf-8 -*-
from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
importtimedefget_good(driver):try:goods= driver.find_elements_by_class_name("gl-item")for good in goods:        #循环着一夜的的数据detail_url = good.find_element_by_tag_name("a").get_attribute("href")     #商品详情detail_price = good.find_element_by_css_selector(".p-price i").text       #商品价格detail_name = good.find_element_by_css_selector(".p-name em").text        #商品名detail_com = good.find_element_by_css_selector(".p-commit a").text        #评论量msg = """商品名:%s详情链接:%s商品价格:%s评论量:%s"""%(detail_name,detail_url,detail_price,detail_com)print(msg)#这里可以写入文件操作button = driver.find_element_by_partial_link_text('下一页')       #检测到右下一页链接
button.click()time.sleep(2)get_good(driver)#睡两秒后继续爬,爬的太快容易被服务器检测到exceptException:passdefspilder(url,keyword):driver=webdriver.Chrome()driver.get(url)driver.implicitly_wait(7)try:input_tag= driver.find_element_by_id("key")input_tag.send_keys(keyword)input_tag.send_keys(Keys.ENTER)get_good(driver)finally:driver.close()if __name__ == '__main__':spilder("https:www.jd.com","情趣")

爬取京东商品

#-*- coding: utf-8 -*-from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
from PIL import Image #pip3 install pillowimporttimedefget_snap(driver):''':param driver::return: 返回屏幕的全图'''driver.save_screenshot("snap.png")snap_obj= Image.open("snap.png")#snap_obj.show()returnsnap_objdefget_image(driver):''':param driver::return:返回验证图片的全图'''img= driver.find_element_by_class_name("geetest_canvas_img")time.sleep(2)size= img.size       #获取到图片大小location = img.location  #获取到图片的相对位置
left= location["x"]top= location["y"]right= left + size["width"]bottom= top + size["height"]#print(left,top,right,bottom)
snap_obj=get_snap(driver)image_obj= snap_obj.crop((left,top,right,bottom))    #截取全部中的坐标图片#image_obj.show()returnimage_objdefget_distance(image1,image2):start_x= 58  #图片的x轴起始位置threhold = 60  #误差的阀值for x inrange(start_x, image1.size[0]):for y in range(image1.size[1]):  #x,y 是他们额像素点rgb1 = image1.load()[x, y]  #获取第一张图片的像素点rgb2 = image2.load()[x, y]  #获取第二张图片的像素点res1 = abs(rgb1[0] -rgb2[0])res2= abs(rgb1[1] - rgb2[1])res3= abs(rgb1[2] - rgb2[2])if not (res1 < threhold and res2 < threhold and res3 <threhold):return x - 7defget_tracks(distance):distance+= 20  #滑动距离+20   →欺骗服务器v0 =0s=0t= 0.2mid= distance*3/5forward_tracks=[]while s <distance:if s <mid:a=2else:a=-3v=v0track= v*t+0.5*a*(t**2)track= round(track)    #四舍五入v0 = v + a*ts+=trackforward_tracks.append(track)#移动轨迹back_tracks = [-1, -1, -1, -2, -2, -2, -3, -3, -2, -2, -1]  #多加的20个单位return {"forward_tracks":forward_tracks,"back_tracks":back_tracks}defslice(url,username,password):try:driver=webdriver.Chrome()driver.get(url)driver.implicitly_wait(3)#1、输入账号,密码,点击登录input_user = driver.find_element_by_id("input1")input_pwd= driver.find_element_by_id("input2")login_user= driver.find_element_by_id("signin")input_user.send_keys(username)input_pwd.send_keys(password)login_user.click()#2、 点击按钮,出现验证码图片(完整的图)geetest_radar_tip = driver.find_element_by_class_name("geetest_radar_tip")geetest_radar_tip.click()#3、针对没有缺口的图片截图image1 =get_image(driver)#4、点击滑动按钮,出现残缺的图片slider_button = driver.find_element_by_class_name("geetest_slider_button")slider_button.click()#5、针对有缺口的图片截图image2 =get_image(driver)#6、对比两张图片,找出缺口,就是滑动的2唯一distance = get_distance(image1, image2)  #获取到图片的位移信息#7、按照人的行为习惯,把总位移切成小的位移track_dic =get_tracks(distance)#8、 按照位移移动图片slider_button = driver.find_element_by_class_name("geetest_slider_button")  #找到按钮ActionChains(driver).click_and_hold(slider_button).perform()  #摁住它
forward_tracks= track_dic["forward_tracks"]  #前进的距离back_tracks = track_dic["back_tracks"]  #后退的距离(刚开始给distance+=20)print(forward_tracks, back_tracks)for forward_track inforward_tracks:ActionChains(driver).move_by_offset(xoffset=forward_track, yoffset=0).perform()  #移动增加的距离time.sleep(0.3)  #睡0.3秒模仿人动作延迟#print("==================================>")for back_track in back_tracks:  #后退的距离ActionChains(driver).move_by_offset(xoffset=back_track, yoffset=0).perform()ActionChains(driver).move_by_offset(xoffset=-3, yoffset=0).perform()  #最终抖一抖ActionChains(driver).move_by_offset(xoffset=3, yoffset=0).perform()  #抖一抖time.sleep(0.3)ActionChains(driver).release().perform()#释放time.sleep(2)exceptException:passfinally:driver.close()if __name__ == '__main__':url= "https://passport.cnblogs.com/user/signin"username= "username"password= "password"slice(url,username,password)

自动登录博客园


转载于:https://www.cnblogs.com/52-qq/p/8303336.html

请求库-selenium 模块相关推荐

  1. 1月11日学习内容整理:请求库selenium之选择器,等待元素被加载

    首先引入: from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdr ...

  2. 爬虫第五章 selenium模块的应用

    什么是selenium selenium是一款基于浏览器自动化的模块和爬虫的关联:- 模拟登录- 获取动态加载的数据 selenium如何获取动态加载的数据 环境安装 : pip install se ...

  3. python urllib.request 爬虫 数据处理-python爬虫1--urllib请求库之request模块

    urllib为python内置的HTTP请求库,包含四个模块: request:最基本的HTTP请求模块, 只需要传入URL和参数 error:异常处理模块 parse:工具模块,处理URL,拆分.解 ...

  4. Day02:requests请求库,selenium请求库

    一 requests请求库爬取豆瓣电影信息  - 请求url https://movie.douban.com/top250 - 请求方式 GET​- 请求头 user-agent cookies i ...

  5. day02 requests请求库爬取豆瓣电影信息+selenium请求库

    一. requests请求库爬取豆瓣电影信息 - 请求url http://movie.douban.com/top250 - 请求方式 GET - 请求头 user-agent    cookies ...

  6. 爬虫请求库 requests

    requests模块 阅读目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的u ...

  7. python 模拟浏览器selenium_Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例...

    本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Poo ...

  8. python采集直播间数据_Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例...

    本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Poo ...

  9. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)

    python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...

最新文章

  1. DB2 catalog
  2. 升级 90天 vs2008 在win2008下。
  3. C++中逗号操作符的重载
  4. Creo二次开发--内存清理函数
  5. typeorm mysql_从零搭建项目 (10) --- 后端: 使用 TypeORM 和 MySQL
  6. [Java基础]线程安全的类
  7. 修改SqlServer的登录密码
  8. mySQL字符串字段区别_MySQL类型之(字符串列类型区分、数据类型区分)
  9. windows curl ssl版本编译
  10. 蓝桥杯 基础练习 Huffuman树
  11. 在 Delphi 下使用 DirectSound (6): 按文件自己的格式(TWaveFormatEx)播放
  12. junit可执行但控制层无法执行_springboot项目controller接口junit测试
  13. cordova 美洽_phonegap-cordova-美洽客服插件-ios
  14. google code prettify 多款主题颜色及下载
  15. 虚拟服务器需要备案吗,虚拟主机需要备案吗
  16. Android 文件管理器的列表界面
  17. iphoneXR的tabbar底部图片的适配
  18. Java编程思想读书笔记——初始化与清理(二)
  19. Android -- 多媒体播放之MediaPlayer基础简介
  20. ubuntu 安装完成后重启电脑报错: BUG soft lockup 的解决办法

热门文章

  1. 2020年度盘点出炉!技术好文一口气读完
  2. 从Weex到Web,性能逆势如何破局?
  3. FlinkX 如何读取和写入 Clickhouse?
  4. 无人化运维离我们有多远?阿里智能化运帷平台深度揭秘
  5. 单人制作游戏手册之五:好看的素材令人心旷神怡!
  6. 畅销榜第7,《魔神英雄传:神龙斗士》制作人复盘研发历程
  7. 开源游戏服务器端框架Firefly正式将GFirefly整合
  8. 我的Go+语言初体验——go【Format】goplus
  9. Linux从零开始(一、安装系统)
  10. android data binding jetpack III 绑定一个方法