Python爬虫:selenium模块基本使用

简介: Python爬虫:selenium模块基本使用

参考文档:

Selenium with Python英文文档

Selenium with Python中文翻译文档


from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time
# 声明浏览器对象
driver = webdriver.Chrome()
# 可用的浏览器对象:
# Firefox,Chrome,Ie,Edge,Opera,Safari,BlackBerry,PhantomJS,Android
# 访问页面
def foo1():
    driver.get("http://www.baidu.com")
    print(driver.page_source)
    # 查找元素
    try:
        p=driver.find_element_by_class_name("p")
    except NoSuchElementException as e:
        print(e)
    """
    # 单个元素
    find_element_by_id
    find_element_by_name
    find_element_by_xpath
    find_element_by_tag_name
    find_element_by_link_text
    find_element_by_class_name
    find_element_by_css_selector
    find_element_by_partial_link_text
    # 多个元素
    find_elements_by_id
    find_elements_by_name
    find_elements_by_xpath
    find_elements_by_tag_name
    find_elements_by_link_text
    find_elements_by_class_name
    find_elements_by_css_selector
    find_elements_by_partial_link_text
    """
    # 通用查找方式
    from selenium.webdriver.common.by import By
    driver.find_element(By.ID, "kw")
    """
    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"
    """
# 元素交互
def foo2():
    import time
    driver.get("http://www.baidu.com")
    input = driver.find_element_by_id("kw")
    input.send_keys("淘宝")
    time.sleep(2)
    input.clear()
    input.send_keys("京东")
    button = driver.find_element_by_id("su")
    time.sleep(2)
    button.click()
# 交互动作
# 将动作附加到动作链中串行执行
def foo3():
    driver.get("http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
    # 切换到子frame
    driver.switch_to.frame("iframeResult")
    draggable = driver.find_element_by_id("draggable")
    droppable = driver.find_element_by_id("droppable")
    actions = webdriver.ActionChains(driver)
    actions.drag_and_drop(draggable, droppable)
    actions.perform()
    # 切换回父frame
    driver.switch_to.parent_frame()
# 执行javascript
def foo4():
    driver.execute_script('alert("hello")')
# 获取文本和属性
def foo5():
    driver.get("https://www.zhihu.com/topics")
    # 隐式等待
    driver.implicitly_wait(10)
    # 显示等待
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    wait = WebDriverWait(driver, 10)
    logo = wait.until(EC.presence_of_element_located((By.ID, "zh-top-link-logo")))
    print(logo.text)
    # 获取属性, id, 标签名, 位置, 大小
    print(logo.get_attribute("class"))
    print(logo.id)
    print(logo.location)
    print(logo.tag_name)
    print(logo.size)
# 前进后退
def foo6():
    import time
    driver.get("http://www.taobao.com")
    driver.get("http://www.jd.com")
    driver.get("http://www.qq.com")
    time.sleep(2)
    driver.back()
    time.sleep(2)
    driver.forward()
    time.sleep(3)
# cookie
def foo7():
    driver.get("https://www.zhihu.com/explore")
    print(driver.get_cookies())
    driver.add_cookie({"name": "mouday", "value": "mouday.com"})
    print(driver.get_cookies())
    driver.delete_all_cookies()
    print(driver.get_cookies())
# 选项卡管理
def foo8():
    driver.get("https://www.qq.com/")
    # 开启
    driver.execute_script("window.open()")
    print(driver.window_handles)
    # 切换
    driver.switch_to_window(driver.window_handles[1])
    driver.get("https://www.taobao.com/")
    time.sleep(2)
    # 切换
    driver.switch_to_window(driver.window_handles[0])
    driver.get("https://www.jd.com/")
    time.sleep(2)
# 异常处理
def foo9():
    try:
        driver.get("https://www.google.com")
    except TimeoutException as e:
        print(e.msg)
    try:
        p = driver.find_element_by_class_name("p")
    except NoSuchElementException as e:
        print(e)
# 关闭退出浏览器
driver.close()
driver.quit()
# 如果不退出浏览器,会报错:
# ImportError: sys.meta_path is None, Python is likely shutting down

相关文章
|
3月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
158 62
|
3月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
193 6
|
1天前
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
打造高效的Web Scraper:Python与Selenium的完美结合
|
2月前
|
Python
Python Internet 模块
Python Internet 模块。
133 74
|
3月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
141 63
|
3月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
3月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
133 61
|
3月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
3月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3

热门文章

最新文章

推荐镜像

更多