《手牵手带你走进python世界》系列三

day03

  • selenium 介绍

    Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),[Mozilla Firefox](https://baike.baidu.com/item/Mozilla Firefox/3504923),Safari,Google Chrome,Opera等。

  • 驱动对应表

    chromedriver版本 支持的Chrome版本
    v2.46 v71-73
    v2.45 v70-72
    v2.44 v69-71
    v2.43 v69-71
    v2.42 v68-70
    v2.41 v67-69
    v2.40 v66-68
    v2.39 v66-68
    v2.38 v65-67
    v2.37 v64-66
    v2.36 v63-65
    v2.35 v62-64
    v2.34 v61-63
    v2.33 v60-62
    v2.32 v59-61
    v2.31 v58-60
    v2.30 v58-60
    v2.29 v56-58
    v2.28 v55-57
    v2.27 v54-56
    v2.26 v53-55
    v2.25 v53-55
    v2.24 v52-54
    v2.23 v51-53
    v2.22 v49-52
    v2.21 v46-50
    v2.20 v43-48
    v2.19 v43-47
    v2.18 v43-46
    v2.17 v42-43
    v2.13 v42-45
    v2.15 v40-43
    v2.14 v39-42
    v2.13 v38-41
    v2.12 v36-40
    v2.11 v36-40
    v2.10 v33-36
    v2.9 v31-34
    v2.8 v30-33
    v2.7 v30-33
    v2.6 v29-32
    v2.5 v29-32
    v2.4 v29-32
  • 安装谷歌驱动 找到对应的版本

  • 元素定位

    元素名称 webdriver-api
    id find_element_by_id()
    name find_element_by_name()
    class name find_element_by_class_name()
    tag name find_element_by_tag_name()
    link text find_element_by_link_text()
    partial link text find_element_by_partial_link_text()
    xpath find_element_by_xpath()
    css selector find_element_by_css_selector()
  • 元素操作方式

    方法 说明
    clear 清除标签内容
    send_keys 模拟按键输入
    click 点击
    submit 提交表单
    back 向后
    forward 向前
    maximize_window 全屏
  • 开胃菜

    # 百度搜索老男孩
    from selenium import webdriver
    # 打开浏览器
    b = webdriver.Chrome()
    # 请求百度
    b.get('https://www.baidu.com')
    # 找到百度的input输入框的标识符 id:kw
    ele = b.find_element_by_id('kw')
    # 清除输入框信息
    ele.clear()
    # 输入 老男孩 
    ele.send_keys('老男孩')
    # 查找点击按钮节点
    su = b.find_element_by_id('su')
    # 点击按钮
    su.click()
    
    
  • 爬取京东商城

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys  # 键盘按键操作
    import time
    
    def get_goods(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')
    
                p_name = good.find_element_by_css_selector('.p-name em').text.replace('\n','')
                price = good.find_element_by_css_selector('.p-price i').text
                p_commit = good.find_element_by_css_selector('.p-commit a').text
                msg = '''
                商品 : %s
                链接 : %s
                价钱 :%s
                评论 :%s
                ''' % (p_name, detail_url, price, p_commit)
    
                print(msg, end='\n\n')
    
            button = driver.find_element_by_partial_link_text('下一页')
            button.click()
            time.sleep(1)
            get_goods(driver)
        except Exception:
            pass
    
    
    def spider(url, keyword):
        driver = webdriver.Chrome()
        driver.get(url)
        driver.implicitly_wait(3)  # 使用隐式等待
        try:
            input_tag = driver.find_element_by_id('key')
            input_tag.send_keys(keyword)
            input_tag.send_keys(Keys.ENTER)
            get_goods(driver)
        finally:
            driver.close()
    
    
    if __name__ == '__main__':
        spider('https://www.jd.com/', keyword='华为P30')
    
  • 爬取QQ空间动态

    import time
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome()
    
    driver.get('https://i.qq.com/')
    driver.switch_to.frame('login_frame')
    driver.find_element_by_id("switcher_plogin").click()
    user = driver.find_element_by_id('u')
    user.send_keys('')  # QQ号
    pwd = driver.find_element_by_id('p')
    pwd.send_keys('xxxxxxx') # 密码
    submit = driver.find_element_by_id('login_button')
    submit.click()
    time.sleep(2)
    
    for i in range(50):
        driver.execute_script("window.scrollTo(0,500)")
        time.sleep(5)
    
    li_list = driver.find_elements_by_class_name("f-single")
    print(len(li_list))
    
    for li in li_list:
        print(li.text)
        print('*' * 60)
    
posted @   巫小诗  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示