Python 크롤러 고급 - 셀레늄은 win 및 linux에서 프록시를 사용합니다.

목차

Windows 셀레늄 구성

다운로드 링크

Chrome Chromedriver 버전 대응

연습 시험

작동 요소

브라우저 작업

요소 정보 얻기

마우스 조작

전투 데모

셀레늄 추가 프록시

리눅스 셀레늄 구성

서버 환경 확인

타사 라이브러리 다운로드 및 설치(가장 간단한 버전)

연습 시험

코드 테스트

디렉토리에 스크린샷 png 보기 생성

Selenium이 Linux에서 헤드 모드로 실행되도록 하기 

Xvfb 소개

전투 테스트


Windows 셀레늄 구성

다운로드 주소(직접 클릭하면 됩니다)

셀레늄
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을 사용하면 URL "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_72.0.3626"이 표시됩니다.
  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 주소가 방문하는 것은 불가능하다.

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

 ip와 port를 직접 찾아서 프록시 플랫폼 api를 통해 직접 받아서 설치하면 됩니다.

리눅스 셀레늄 구성

서버 환경 확인

[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 설치 셀레늄

# 크롬드라이버 설치

냠 설치 https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 냠 설치 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 크롬드라이버 /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 보기 생성

Selenium이 Linux에서 헤드 모드로 실행되도록 하기 

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