一、selenium的介绍

1.是一个自动化测试工具,模拟人的行为,做爬虫为了解决使用 requests模块无法执行ajax获取数据
2.使用selenium+半人工登录,获取cookie---》给requests模块使用

二、selenium的使用

1 安装模块  pip3 install selenium
2 驱动浏览器(需要浏览器驱动---》不同去不同浏览器官网下载),下载的驱动要跟浏览器版本对应
  http://npm.taobao.org/mirrors/chromedriver/
3 以chrom(谷歌)浏览器为例

三、基本使用

# 模块装完了
# 下一个谷歌浏览器驱动,放到项目根路径下


# 开始使用

from selenium import webdriver
 import time
#  拿到一个谷歌浏览器对象
#  打开谷歌浏览器(指定驱动在哪)
 bro=webdriver.Chrome(executable_path='chromedriver.exe')
#  在地址栏输入http://www.baidu.com
 bro.get('http://www.cnblogs.com')

 print(bro.page_source) # 该页面的源代码
 time.sleep(5)
 # 关闭浏览器
 bro.close()

 

3.2 无界面浏览器

# import time
# from selenium.webdriver.chrome.options import Options
# chrome_options = Options()
# chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
# chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
# chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
# chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
#
# # 隐藏浏览器界面
# chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
#
# bro=webdriver.Chrome(executable_path='chromedriver.exe',options=chrome_options)
# bro.get('http://www.cnblogs.com')
#
# print(bro.page_source)
# time.sleep(5)
# # 关闭浏览器
# bro.close()

3.3 模拟登录百度

from selenium import webdriver

import time

bro=webdriver.Chrome(executable_path='chromedriver.exe')

bro.get('http://www.baidu.com')

bro.implicitly_wait(100)  # 如果控件没有加载出来,会等一会


# 根据a标签链接的文字来查找
login_a=bro.find_element_by_link_text('登录')
# 点击一下
login_a.click()

# 用户名登录的p标签,使用id找

username_login_p=bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn')
username_login_p.click()

# username_input=bro.find_element_by_id('TANGRAM__PSP_11__userName')
username_input=bro.find_element_by_name('userName')
# 写入用户名
username_input.send_keys('306334678@qq.com')

password_input=bro.find_element_by_id('TANGRAM__PSP_11__password')
password_input.send_keys('sss')

login_button=bro.find_element_by_id('TANGRAM__PSP_11__submit')

time.sleep(5)
login_button.click()

time.sleep(10)


print(bro.get_cookies())


bro.close()

3.4 selenium的其他使用

import time
from selenium import webdriver

bro=webdriver.Chrome(executable_path='chromedriver.exe')
# bro.get('http://www.baidu.com')

# print(bro.page_source)

# 选择器
# 1、find_element_by_id                通过id获取控件
# 2、find_element_by_link_text         通过a标签的文本获取标签
# 3、find_element_by_partial_link_text 通过a标签的文本模糊匹配获取标签
# 4、find_element_by_tag_name          通过标签名找
# 5、find_element_by_class_name        通过类名找
# 6、find_element_by_name              通过name属性找
# 7、find_element_by_css_selector      css选择器
# 8、find_element_by_xpath             xpath选择器


# input_1=bro.find_element_by_css_selector('#kw')
# # 往输入框中写文字
# input_1.send_keys('美女')
#
# search_btn=bro.find_element_by_css_selector('#su')
# search_btn.click()



# 获取某个标签的属性,位置,id,名字..

# input_1=bro.find_element_by_css_selector('#kw')
# print(input_1.id)
# print(input_1.tag_name)
# print(input_1.get_attribute('maxlength'))
# print(input_1.location)
# print(input_1.size)




## 等待元素被加载(显示等待,隐士等待)
# bro.implicitly_wait(10)  # 隐士等待,等待所有,再下方再去找一个控件,如果控件没有加载出来,最多等待10s


# 显示等待(基本不用),指定等待某个控件几秒
# from selenium.webdriver.support.wait import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
# wait=WebDriverWait(bro,10)
# wait.until(EC.presence_of_element_located((By.ID,'kw')))



## 控件其它操作
# 点击操作
# search_btn=bro.find_element_by_css_selector('#su')
# search_btn.click()  # 点击操作

# input_1=bro.find_element_by_css_selector('#kw')
# # 往输入框中写文字
# # 清空操作
# input_1.send_keys('美女')
# time.sleep(1)
# input_1.clear()
# input_1.send_keys('帅哥')




### 执行js
# bro.get('https://www.pearvideo.com/video_1715923')
# bro.execute_script('alert(urlMap.registerUrl)')

# bro.execute_script('scroll(0,30000)')  # 滑倒屏幕底部,有的页面滑倒底部自动加载数据



# 模拟浏览器前进后退

#
# bro.get('http://www.baidu.com')
# bro.get('http://www.taobao.com')
# bro.get('http://www.cnblogs.com')
#
# bro.back()
#
# time.sleep(1)
# bro.forward()
# time.sleep(1)

# bro.get('http://www.cnblogs.com')
#
# time.sleep(30)


### cookie的处理
# print(type(bro.get_cookies())) # 把所有cookie取出来
# cookies=bro.get_cookies()
# import json
# with open('cookie.json','w') as f:
#     json.dump(cookies,f)
#
# # 取到cookie之后,存到文件中
# # 再打开一个页面,还是这个网站,把cookie之间写入
#
# time.sleep(1)
# # 关闭浏览器
# bro.close()




### 选项卡管理
# 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(2)
# browser.switch_to_window(browser.window_handles[0])
# browser.get('https://www.sina.com.cn')
# browser.close()



## 异常捕获
try:
    browser=webdriver.Chrome()
    browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
    browser.switch_to.frame('iframssseResult')

except Exception as e:
    print(e)
finally:
    browser.close()  # 关闭浏览器

# 动作链
# 使用selenium爬取京东商品信息

 

 

from selenium import webdriver
import json
import time
bro=webdriver.Chrome(executable_path='chromedriver.exe')
bro.get('http://www.cnblogs.com')
with open('cookie.json','r') as f:
    cookie=json.load(f)

for i in cookie:
    bro.add_cookie(i)
time.sleep(1)
bro.refresh()
time.sleep(1)
bro.refresh()

time.sleep(4)
bro.close()

 

posted on 2021-01-21 16:29  輪滑少年  阅读(230)  评论(0编辑  收藏  举报