0


Python爬虫——Selenium

简介

Selenium是一个自动化测试框架,可以通过编程语言控制浏览器进行各种操作。在Python中,可以使用Selenium实现爬虫。

    首先,我们需要需要安装Selenium库。可以使用pip命令安装:
pip install selenium
    要使用的话我们还需要下载对应浏览器的驱动程序。Selenium支持多种浏览器,比如Chrome、Firefox等。

 谷歌驱动地址:http://chromedriver.storage.googleapis.com/index.html

还有这个:Chrome for Testing availability

    这个真的是给我折磨掺了,我一开始发现我谷歌浏览器版本太高了,然后一开始的网站没有对应的版本,然后我就整卸载了我的google然后花了好久去找了一个低版本的,因为我的谷歌一直添加了很多的插件,所以我就登录了一下我的谷歌账号来同步一下,结果谷歌自动给我更新到了最新版,我心态崩了,然后我抱着侥幸的姿态去试了一下selenium,结果发现驱动不匹配,然后我又花了好久再找到上面的第二个链接有高版本的驱动,我真的哭了┭┮﹏┭┮

    这个地址最好是使用一些魔法来访问,国内好像访问不到,我不用魔法的话直接到反诈中心了。。。。

下面是一个示例代码,展示了如何使用Selenium爬取网页内容:

from selenium import webdriver

# 创建浏览器对象
driver = webdriver.Chrome("/path/to/chromedriver")

# 访问网页
driver.get("http://www.example.com")

# 打印网页标题
print(driver.title)

# 关闭浏览器
driver.quit()
    上面的示例代码使用了Chrome浏览器和Chrome驱动程序。要将路径
/path/to/chromedriver

修改为你自己的驱动程序路径。

    通过Selenium,你可以模拟浏览器行为,比如点击按钮、填写表单等。当然,你也可以获取网页的源码,进一步解析和提取数据。

    需要注意的是,Selenium是一个相对比较重量级的库,适用于对JavaScript等**动态内容**较多的网页进行爬取。对于静态网页,我们一般使用requests进行爬取,效率更高。

为什么使用selenium呢?

    模拟浏览器功能,自动执行网页中的js代码,实现动态加载

    这里大家如果报错各种奇奇怪怪的,建议使用selenium的3.3.1版本,我无论是python3.1还是3.7使用这个版本都不报错,而使用其他版本全部报错。。。。。。。。我裂开   

基本使用

# (1)导入selenium
from selenium import webdriver

# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'

browser = webdriver.Chrome(path)

# (3)访问网站
url = 'https://www.jd.com/'

browser.get(url)

# page_source获取网页源码
content = browser.page_source
print(content)

这样的话就可以获得京东的秒杀页面的代码了


Selenium的元素定位

    元素定位:自动化要做的事情就是模拟鼠标和键盘来操作这些元素,例如点击和输入等。在操作这些元素之前,首先是要找到他们, WebDriver 提供很多定位元素的方法。

示例代码如下:

# (1)导入selenium
from selenium import webdriver

# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'

browser = webdriver.Chrome(path)

# (3)访问网站
url = 'https://www.baidu.com'

browser.get(url)

# 元素定位:
# 根据id寻找到对象
button = browser.find_element_by_id('su')
print(button)

# 根据标签属性的值来获取对象
button = browser.find_element_by_name('wd')
print(button)

# 根据xpath语句来获取对象
button = browser.find_elements_by_xpath('//input[@id="su"]')
print(button)

# 根据标签名来获取对象
button = browser.find_elements_by_tag_name('input')
print(button)

# 使用bs4的语法来获取对象
button = browser.find_elements_by_css_selector('#su')
print(button)

# 获取链接,也就是a标签
button = browser.find_element_by_link_text('视频')
print(button)

Selenium的访问元素信息

# (1)导入selenium
from selenium import webdriver

# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'

browser = webdriver.Chrome(path)

# (3)访问网站
url = 'http://www.baidu.com'

browser.get(url)

input = browser.find_element_by_id('su')
# 获取元素属性
print(input.get_attribute('class'))

# 获取标签名
print(input.tag_name)

# 获取元素文本,这个是获取<>这里的内容</>
a = browser.find_element_by_link_text('新闻')
print(a.text)

Selenium交互

    直接上代码,下述的代码可以实现整个页面的互相调用。什么意思呢,就是可以直接通过程序先输入一个 ‘ 章若楠 ’ ,然后滑到最下面然后再点击下一页,然后再往下滑,然后再回到前一页,再去后一页。
# (1)导入selenium
from selenium import webdriver
import time

# 创建浏览器对象
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)

# url
url = "https://www.baidu.com"
browser.get(url)

time.sleep(2)

# 获取文本框的对象
input = browser.find_element_by_id('kw')

# 在文本框中输入章若楠
input.send_keys('章若楠')

time.sleep(2)

# 获取百度一下的按钮
button = browser.find_element_by_id('su')
# 点击按钮
button.click()

time.sleep(2)

# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)

time.sleep(2)

# 获取下一页的按钮
next = browser.find_element_by_xpath('//a[@class="n"]')
# 点击下一页
next.click()

time.sleep(2)

browser.execute_script(js_bottom)

time.sleep(2)
# 回到上一页
browser.back()

time.sleep(2)

browser.execute_script(js_bottom)

time.sleep(2)
# 下一页
browser.forward()

time.sleep(3)

# 退出
browser.quit()

phantomjs

# phantomjs 的基本使用
from selenium import webdriver
import time

path = 'phantomjs.exe'

browser = webdriver.PhantomJS(path)

url = 'https://www.baidu.com'

browser.get(url)

browser.save_screenshot('baidu.png')

time.sleep(2)

input = browser.find_element_by_id('kw')
input.send_keys('李一桐')

time.sleep(2)
browser.save_screenshot('李一桐.jpg')

Chrome handless

到这里我就裂开了

需要Python3.6以上的,我现在还用的3.1,爆炸了我要┭┮﹏┭┮

......

   重新从这里开始写文章已经是两天之后了,没错,我完美的预判到了重新下载python将会导致的一系列版本不兼容问题,我哭了,我累了,但是好在我搞定了┭┮﹏┭┮

配置

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

# path是你自己的Chrome浏览器的文件路径
# 这里也是我们唯一需要修改的地方
path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path

browser = webdriver.Chrome(chrome_options=chrome_options)

上面的代码除了path几乎不用修改

url = 'https://www.baidu.com'

browser.get(url)

browser.save_screenshot("baidu.png")

可以再加上这几行浅浅使用一下

可以使用方法封装一下然后调用

# 封装的handless
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

"""
    封装一下
"""
def share_browser():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')

    # path是你自己的Chrome浏览器的文件路径
    # 这里也是我们唯一需要修改的地方
    path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
    chrome_options.binary_location = path

    browser = webdriver.Chrome(chrome_options=chrome_options)
    return browser

browser = share_browser()
url = 'https://www.jd.com'
browser.get(url)
browser.save_screenshot("jd.jpg")

总结

这一章真的不难,但是我真的很烦!!!

更新完python真的多了好多事,好多版本真的不兼容,哭了哭了┭┮﹏┭┮

标签: python 爬虫 selenium

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

“Python爬虫——Selenium”的评论:

还没有评论