Python クローラーの高度な機能 - selenium は win および linux でプロキシを使用します

目次

Windows セレン構成

ダウンロードリンク

Chrome Chromedriver バージョン対応

模擬試験

操作要素

ブラウザ操作

要素情報を取得する

マウス操作

戦闘デモ

セレン追加プロキシ

Linux セレン構成

サーバー環境を確認する

サードパーティ ライブラリをダウンロードしてインストールする (最も単純なバージョン)

模擬試験

コードのテスト

ディレクトリにスクリーンショットのpngビューを作成します

LinuxでSeleniumをヘッドモードで実行する 

Xvfb の紹介

戦闘試験


Windows セレン構成

ダウンロードアドレス(直接クリックするだけです)

Selenium
ChromeDriver
Chrome
GeckoDriver
Firefox

Chrome  Chromedriverバージョン 間の対応

複数のバージョンの ChromeDriver を維持しています。選択するバージョンは、使用している Chrome のバージョンによって異なります。

  1. 具体的には、ChromeDriver は Chrome と同じバージョン番号スキームを使用します。詳細については、https://www.chromium.org/developers/version-numbers を参照してください。
  2. ChromeDriver の各バージョンは、同じメジャー、マイナー、およびビルド番号を持つ Chrome をサポートします。たとえば、ChromeDriver 73.0.3683.20 は、73.0.3683 以降のすべての Chrome バージョンをサポートします。
  3. Chrome の新しいメジャー バージョンがベータ版になる前に、対応するバージョンの ChromeDriver がリリースされます。
  4. 新しいメジャー バージョンの最初のリリース後、必要に応じてパッチをリリースします。これらのパッチは、Chrome ブラウザの更新と一致する場合と一致しない場合があります。

ダウンロードする ChromeDriver のバージョンを選択する手順は次のとおりです。

  1. まず、使用している Chrome ブラウザのバージョンを確認します。Chrome が 72.0.3626.81 だとします。
  2. Chrome のバージョン番号を取得し、最後の部分を削除して、結果を URL "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_" に追加します。たとえば、Chrome バージョン 72.0.3626.81 を使用すると、「https://chromedriver.storage.googleapis.com/LATEST_RELEASE_72.0.3626」という URL が取得されます。
  3. 最後の手順で作成した URL を使用して、使用する ChromeDriver のバージョンを含む小さなファイルを取得します。たとえば、上記の URL は「72.0.3626.69」を含むファイルになります。(もちろん、実際の数値は将来変更される可能性があります)。
  4. 前の手順で取得したバージョン番号を使用して、ChromeDriver をダウンロードする URL を作成します。バージョン 72.0.3626.69 の場合、URL は「https://chromedriver.storage.googleapis.com/index.html?path=72.0.3626.69/」になります。
  5. 最初のダウンロード後、上記のプロセスを時々実行して、バグ修正リリースがあるかどうかを確認することをお勧めします。

模擬試験

操作要素

1、.send_keys()  # 输入方法
2、.click()  # 点击方法
3、.clear()  # 清空方法

ブラウザ操作

1、driver.maximize_window()  # 最大化浏览器
2、driver.set_window_size(w,h)  # 设置浏览器大小 单位像素 【了解】
3、driver.set_window_position(x,y)  # 设置浏览器位置  【了解】
4、driver.back() # 后退操作
5、driver.forward() # 前进操作
6、driver.refrensh() # 刷新操作
7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
8、driver.quit() # 关闭driver对象启动的全部页面
9、driver.title # 获取当前页面title信息
10、driver.current_url # 获取当前页面url信息

要素情報を取得する

1、text 获取元素的文本; 如:driver.text
2、size 获取元素的大小: 如:driver.size
3、get_attribute 获取元素属性值;如:driver.get_attribute("id") ,传递的参数是元素的属性名
4、is_displayed 判断元素是否可见 如:element.is_displayed()
5、is_enabled 判断元素是否可用 如:element.is_enabled()
6、is_selected 判断元素是否被选中 如:element.is_selected()

マウス操作

1、context_click(element) # 右击
2、double_click(element)  #双击
3、double_and_drop(source, target)  # 拖拽
4、move_to_element(element)  # 悬停 【重点】
5、perform()  # 执行以上事件的方法 【重点】

戦闘デモ

# demo
from selenium import webdriver
from selenium.webdriver.common.by import By
import time


options = webdriver.ChromeOptions()

options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
# options.add_argument('--proxy-server=http://{0}'.format(ip))
driver = webdriver.Chrome(options=options)

# 用户正常访问该值为false。使用selenium时该值为true。
# 下面代码解决掉这个问题
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
               Object.defineProperty(navigator, 'webdriver', {
                 get: () => undefined
               })
               """
})
driver.get("https://www.baidu.com/")
time.sleep(5)
# 截图看是否访问了百度
driver.save_screenshot("baidu.png")

セレン追加プロキシ

        どんなにクローラーをやってもプロキシを使う必要があり、自動化してもIPアドレスが1日に何千万も訪れることはありえません。

# 添加无认证代理,以参数形式添加
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://ip:port')  
driver = webdriver.Chrome(chrome_options=chromeOptions)

 自分で IP とポートを見つけ、プロキシ プラットフォーム API から直接取得し、インストールするだけです。

Linux セレン構成

サーバー環境を確認する

[root@aa /]# lsb_release -a
Distributor ID: CentOS
Release:        7.9.2009

[root@aa /]# python -V
Python 2.7.5

[root@aa /]# python3 -V
Python 3.6.8

サードパーティ ライブラリをダウンロードしてインストールする (最も単純なバージョン)

# セレンをインストール

pip3 インストール セレン

# クロームドライバーをインストール

yum インストール https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum インストール mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts

# 対応バージョンの Chromedriver をダウンロード (下記のバージョン対応 URL が正しい) https://chromedriver.storage.googleapis.com/index.html?path= 110.0.5481.30 /

# 場所を移動

mv chromedriver /usr/bin/

# 実行権限を与える

chmod +x /usr/bin/chromedriver

模擬試験

コードのテスト

# demo
from selenium import webdriver
from selenium.webdriver.common.by import By
import time


#options = webdriver.ChromeOptions()
#options.add_argument('--headless')
options = webdriver.ChromeOptions()
# 服务器无界面运行,否则会报错,后续配置插件解决
options.add_argument("headless")

options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
# options.add_argument('--proxy-server=http://{0}'.format(ip))
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
               Object.defineProperty(navigator, 'webdriver', {
                 get: () => undefined
               })
               """
})
driver.get("https://www.baidu.com/")
time.sleep(5)
# 截图看是否访问了百度
driver.save_screenshot("aaaaaaaaaaaaaaaaaa.png")

ディレクトリにスクリーンショットのpngビューを作成します

LinuxでSeleniumをヘッドモードで実行する 

Xvfb の紹介

Xvfb は、イメージ デバイスのないマシンに X11 ディスプレイ サービス プロトコルを実装します。他のグラフィカル インターフェイスが持つさまざまなインターフェイスを実装しますが、実際のグラフィカル インターフェイスは備えていません。

したがって、プログラムが Xvfb で GUI 関連の操作を呼び出すと、これらの操作は仮想メモリで実行されますが、何も表示されません。

Xvfb を使用すると、Selenium または Puppeteer をだまして、グラフィカル インターフェイスを備えたシステムで実行されていると思わせることができるため、通常はヘッド モードを使用できます。

# インストール

yum install Xvfb

戦闘試験

# 更改 demo

# 服务器无界面运行,否则会报错,后续配置插件解决
# 注释掉 以正常有界面模式运行
# options.add_argument("headless")


xvfb-run XXX
# 例如
xvfb-run python3 selenium_test.py

运行查看截图   成功

----------

2023.2.20

おすすめ

転載: blog.csdn.net/qq_52213943/article/details/129048320