python爬虫 浏览器模拟selenium 简单应用

参考文档地址 https://python-selenium-zh.readthedocs.io/

from selenium import webdriver

打开浏览器读取网页,并关闭 selenium

browser = webdriver.Chrome()
browser.get("http://qifu.baidu.com/?activeKey=SEARCH_IP")
print(browser.page_source)
browser.quit()  # 退出,清除浏览器缓存

简介写法

with webdriver.Chrome() as browser:
    browser.get("http://qifu.baidu.com/?activeKey=SEARCH_IP")
    print(browser.page_source)

加入 配置和隐式等待 ( 即等待全部js加载完成 )

options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox') # 以最高权限运行
options.add_argument('--disable-dev-shm-usage') # 解决资源不足的问题
options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面

# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
options.add_argument('--headless') 

# 不加载图片, 提升速度
options.add_argument('blink-settings=imagesEnabled=false') 

# 谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--disable-gpu') 
with webdriver.Chrome(chrome_options=options) as browser:
    browser.get("http://qifu.baidu.com/?activeKey=SEARCH_IP")
    browser.implicitly_wait(10)# 隐式等待,等待js加载完成在获取页面
    print(browser.page_source)

查找需要元素的方法:

browser.find_element
browser.find_element_by_class_name
browser.find_element_by_css_selector
browser.find_element_by_id
browser.find_element_by_link_text
browser.find_element_by_name
browser.find_element_by_partial_link_text
browser.find_element_by_tag_name
browser.find_element_by_xpath

# 查询多个则element加s,例如:
browser.find_elements_by_class_name

例子:查询某个IP的地址信息

with webdriver.Chrome(chrome_options=options) as browser:
    browser.get("http://qifu.baidu.com/?activeKey=SEARCH_IP")
    browser.implicitly_wait(3)
    # 需要用来查询标签的 class
    inputclass = 'acSearchTool__searchInput-Exa1W'
    submitclass = 'acSearchTool__searchBtn-1IcKW'
    infoclass = 'qifu__ipResultRow-2Aibv'
    # 获取输入框,并且输入需要查询的IP
    element = browser.find_element_by_class_name(inputclass)
    element.send_keys("39.156.69.79")
    # 点击查询按钮
    button_element = browser.find_element_by_class_name(submitclass)
    button_element.click()
    # 等待加载完成
    browser.implicitly_wait(5)
    # 获取查询的结果
    info_elements = browser.find_elements_by_class_name(infoclass)
    for info in info_elements:
        print(info.text)

评论已关闭。