0


爬虫-------selenium

使用

# 使用:
    -安装模块:pip3 install selenium
    -下载浏览器驱动:selenium操作浏览器,需要有浏览器(谷歌浏览器),谷歌浏览器驱动
        -https://registry.npmmirror.com/binary.html?path=chromedriver/
        -浏览器版本对应的驱动
        106.0.5249.119    找到相应的驱动
        
    -写代码测试
    from selenium import webdriver
    import time

    # 驱动放到环境变量中,就不用传这个参数了
    # 打开一个浏览器
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    # 在地址栏输入 网站
    bro.get('http://www.baidu.com')

    time.sleep(3)
    bro.close()  # 关闭tab页
    bro.quit()  # 关闭浏览器

检测不到是代码控制的 ------针对的是谷歌浏览器

from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")  # 去掉自动化控制

放大浏览器

bro.maximize_window()

无界面浏览器

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下如果系统不支持可视化不加这条会启动失败
# chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  # 手动指定使用的浏览器位置
bro = webdriver.Chrome(executable_path='./chromedriver.exe', options=chrome_options)

# 在地址栏输入 网站
bro.get('https://www.jd.com/')
print(bro.page_source) # 浏览器中看到的页面的内容

time.sleep(3)
bro.close()  # 关闭tab页
bro.quit()  # 关闭浏览器

查找标签

from selenium.webdriver.common.by import By

# 查找标签
bro.find_element(by=By.ID,value='id号')
bro.find_element(by=By.LINK_TEXT,value='a标签文本内容')
bro.find_element(by=By.PARTIAL_LINK_TEXT,value='a标签文本内容模糊匹配')
bro.find_element(by=By.CLASS_NAME,value='类名')
bro.find_element(by=By.TAG_NAME,value='标签名')
bro.find_element(by=By.NAME,value='属性name')
# -----通用的----
bro.find_element(by=By.CSS_SELECTOR,value='css选择器')
bro.find_element(by=By.XPATH,value='xpath选择器')

# 获取标签位置,大小
print(code.location)
print(code.size)
-------
print(code.tag_name)
print(code.id)

等待元素被加载

 -显示等待:一般不用,需要指定等待哪个标签,如果标签很多,每个都要设置比较麻烦
-隐士等待:
        bro.implicitly_wait(10)
        find找标签的时候,如果找不到,等最多10s钟

元素操作

# 点击
标签.click()
# input写文字
标签.send_keys('文字')
#input清空文字
标签.clear()

浏览器后退
bro.back()
# 前进一下
bro.forward()

#获取cookie
 cookie = bro.get_cookies()
登录cookie
 bro.add_cookie(item)

# 模拟键盘操作
from selenium.webdriver.common.keys import Keys
input_search.send_keys(Keys.ENTER)

selenium切换选项卡

from selenium import webdriver
import time
bro = webdriver.Chrome()
bro.get('https://www.pearvideo.com/')
bro.implicitly_wait(10)
print(bro.window_handles)

bro.execute_script('window.open()')# 开启选项卡
# 获取出所有选项卡

bro.switch_to.window(bro.window_handles[1]) # 切换到某个选项卡  
bro.get('http://www.taobao.com')
#
time.sleep(2)
bro.switch_to.window(bro.window_handles[0]) # 切换到某个选项卡
bro.get('http://www.baidu.com')

time.sleep(2)
bro.close() # 关闭选项卡
bro.quit()  # 关闭页面

selenium执行js

bro.execute_script('alert(document.cookie)')

execute_script在这里面直接写js代码

获取当前访问的地址  window.location
     -打开新的标签
     -滑动屏幕--》bro.execute_script('scrollTo(0,document.documentElement.scrollHeight)')
     -获取cookie,获取定义的全局变量

获取cookies和传值

cookies = bro.get_cookies()    获取

 bro.add_cookie(传的cookies)        

下拉进度条

def drop_down(driver, many=1):   # 浏览器对象      下拉的次数
    drop_count = 0
    while True:
        drop_count += 1
        if drop_count > many:
            break
        js = "return document.body.scrollHeight"
        # 获取滚动条的高度
        new_height = driver.execute_script(js)
        for i in range(0, new_height, 350):
            time.sleep(0.05)
            driver.execute_script('window.scrollTo(0, %s)' % i)
        time.sleep(1)

整个页面截图

bro.save_screenshot(’截图的名字‘)

xpath使用

  div    选取div标签
    /    从根节点选取
    //    从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
    .    选取当前节点。
    ..    选取当前节点的父节点。
    @    选取属性

'''
/           #当前节点           
//          #任意路径
.
..
取文本  /text()
取属性  /@属性名
根据属性过滤  [@属性名=属性值]
class 特殊
[contains(@class,"li")]
'''
#获取文本
commit = product.find_element(By.XPATH, './div/div[4]/strong/a').text
#获取属性
img = product.find_element(By.XPATH, './div/div[1]/a/img').get_attribute('src')

动作链

# 模拟鼠标点住,拖动的效果,实现滑块认证

# 两种形式
    -形式一:
        actions=ActionChains(bro) #拿到动作链对象
        actions.drag_and_drop(sourse,target) #把动作放到动作链中,准备串行执行
        actions.perform()
    -方式二:
        ActionChains(bro).click_and_hold(sourse).perform()
        distance=target.location['x']-sourse.location['x']
        track=0
        while track < distance:
            ActionChains(bro).move_by_offset(xoffset=2,yoffset=0).perform()
            track+=2
标签: 爬虫 selenium python

本文转载自: https://blog.csdn.net/xiaolisolovely/article/details/130066283
版权归原作者 淘淘桃 所有, 如有侵权,请联系我们删除。

“爬虫-------selenium”的评论:

还没有评论