Python(파충류 시대) - 파충류 개발 03(셀레늄))

셀레늄 기본 작업

셀렌

  • Selenium은 웹 자동화 테스트 도구입니다. 원래 웹사이트 자동화 테스트용으로 개발되었습니다. Selenium은 브라우저에서 직접 실행할 수 있으며 모든 주류 브라우저(예: 인터페이스 없는 브라우저 포함)를 지원합니다. PhantomJS)를 사용하면 브라우저가 자동으로 페이지를 로드하고, 필요한 데이터를 얻고, 페이지의 스크린샷을 찍을 수 있도록 하는 지침을 받을 수 있습니다.

셀렌

  • 설치하다

    • pip 설치 셀레늄

  • 웹페이지 로드

    • Selenium import webdriver에서

    • 드라이버=webdriver.Chrome()

    • 드라이버.get("http://www.baidu.com/")

    • 드라이버.저장_스크린샷("aa.png")

  • 위치 지정 및 작동

    • 드라이버.find_element_by_id("kw").send_keys("샤오바이")

    • 드라이버.find_element_by_id("su").click()

  • 요청 보기

    • 드라이버.페이지_소스

    • 드라이버.get_쿠키()

    • 드라이버.현재_url

  • 그만두다

    • drivers.close() 현재 페이지를 종료합니다.

    • drivers.quit() 브라우저 종료

from selenium import webdriver

# 声明Chrome浏览器对象
wb=webdriver.Chrome()
# 访问百度页面
wb.get("http://www.baidu.com")

Chrome 브라우저가 자동으로 열리고 Baidu를 방문합니다. 결과는다음과 같습니다.

실행 중 아래와 같은 오류가 발생한다면 크롬의 웹드라이버가 설정되지 않았기 때문입니다.

해결책은 다음과 같습니다.

  • 브라우저 버전을 보려면 방문 chrome://version/ 하세요

  • 브라우저 드라이버 URL을 방문하여 Chrome에 해당하는 버전 드라이버를 찾아 시스템에 맞는 드라이버를 선택하세요.  http://chromedriver.storage.googleapis.com/index. HTMLa>

  • 다운로드한 드라이버 파일을 추출하여c 드라이브 브라우저의 설치 디렉터리,에 넣습니다. 동시에 Python 설치 디렉터리에 또 다른 복사본을 넣으세요

창 없는 액세스를 위해 브라우저를 설정할 수도 있습니다.

from selenium import webdriver

# 设置无窗口
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')

# 声明Chrome浏览器对象
wb=webdriver.Chrome(options=chrome_options)
# 访问百度页面
wb.get("http://www.baidu.com")

일반적인 브라우저 매개변수

  • 매개변수는 https://peter.sh/experiments/chromium-command-line-switches/ 에서 확인할 수 있습니다.

# 启动就最大化
--start-maximized

# 指定缓存Cache路径
–-disk-cache-dir=”[PATH]“

# 指定Cache大小,单位Byte
–-disk-cache-size=100

# 隐身模式启动
–-incognito

# 禁用弹出拦截
--disable-popup-blocking

# 禁用插件
--disable-plugins

# 禁用图像
--disable-images

브라우저 프록시 설정

chrome_options.add_argument('--proxy-server=http://{ip}:{port}')

Selenium은 페이지 요소를 작동합니다.

Selenium에서 요소를 찾는 방법에는 두 가지가 있습니다.

  • 첫 번째는 CSS 선택기를 지정하거나 xpath를 기반으로 검색하는 등 요소를 찾는 데 사용할 방법을 지정하는 것입니다.

  • 두 번째는 find_element()를 직접 사용하는 방법으로, 전달되는 첫 번째 매개변수는 사용할 요소 검색 방식, 두 번째 매개변수는 검색값이다.

from selenium import webdriver
from selenium.webdriver.common.by import By

# 声明Chrome浏览器对象
wb=webdriver.Chrome()
# 访问百度页面
wb.get("http://www.baidu.com")

''' 查找单个元素 '''
# 通过id查找
element = wb.find_element_by_id("kw")
print(element.tag_name)
# 通过name查找
element = wb.find_element_by_name("wd")
print(element.tag_name)
# 通过xpath查找
element = wb.find_element_by_xpath('//*[@id="kw"]')
print(element.tag_name)

# 通过另一种方式查找
element = wb.find_element(By.ID, "kw")
print(element.tag_name)
element = wb.find_element(By.NAME, "wd")
print(element.tag_name)


''' 查找多个元素 '''
print("根据class 属性查找多个元素")
elements=wb.find_elements_by_class_name("s-isindex-wrap")
for ele in elements:
    print(ele.tag_name)

Selenium 페이지 작업, 마우스 클릭 이벤트 및 키보드 입력 이벤트 모방

import time
from selenium import webdriver
# 声明Chrome浏览器对象
wb=webdriver.Chrome()
# 访问百度页面
wb.get("http://www.baidu.com")

# 获取百度搜索框元素
element = wb.find_element_by_id("kw")
# 在搜索框中输入关键词 python
element.send_keys("python")
# 点击"百度一下"按钮
wb.find_element_by_xpath('//*[@id="su"]').click()

# 休眼10秒
time.sleep(10)

# 退出当前页面
wb.close()

브라우저 작업

웹페이지를 요청할 때 AJAX 비동기 로딩이 있을 수 있습니다. Selenium은 기본 웹 페이지만 로드하고 AJAX는 고려하지 않습니다. 따라서 계속 진행하기 전에 웹 페이지가 완전히 로드될 때까지 잠시 기다려야 합니다.

암시적 로딩

  • 암시적 대기를 사용할 때 웹드라이버가 지정된 요소를 찾지 못하면 설정된 시간이 초과될 때까지 지정된 요소가 나타날 때까지 계속 대기하며, 여전히 지정된 요소를 찾을 수 없으면 요소를 찾을 수 없다는 예외가 발생합니다. 기본 대기 시간은 0입니다.

  • 암시적 대기는 전체 페이지를 기다리고 있습니다. 암시적 대기는 전체 드라이버 주기에 대해 작동하므로 한 번만 설정하면 됩니다.

from selenium import webdriver

# 声明Chrome浏览器对象
wb=webdriver.Chrome()

# 设置隐式等待时间,单位为秒
wb.implicitly_wait(10)
# 访问百度页面
wb.get("http://www.baidu.com")

# 设置搜索关键词
element = wb.find_element_by_id("kw")
element.send_keys("Python")
wb.find_element_by_xpath('//*[@id="su"]').click()

# 页面右边的"百度热榜"
element2 = wb.find_element_by_xpath('//*[@id="con-ar"]/div[2]/div/div/table/tbody[1]/tr[1]/td[1]/a')
print(element2)

잠깐만 보여줘

  • 명시적 대기는 지정된 요소를 기다립니다. 먼저 대기 조건 성립 여부를 판단하여 성립하면 바로 복귀하고, 조건 성립하지 않으면 최대 대기 시간은 설정된 대기 시간이 되며, 대기 시간 후에도 여전히 대기 조건이 충족되지 않으면 예외가 된다. 던져졌다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 声明Chrome浏览器对象
wb=webdriver.Chrome()
# 访问百度页面
wb.get("http://www.baidu.com")

# 设置搜索关键词
element = wb.find_element_by_id("kw")
element.send_keys("Python")
wb.find_element_by_xpath('//*[@id="su"]').click()

# 显示等待10秒,直到页面右边的"百度热榜列表"出现
WebDriverWait(wb, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "toplist1-tr")))

# 获取页面右边的"百度热榜"
element2 = wb.find_element_by_xpath('//*[@id="con-ar"]/div[2]/div/div/table/tbody[1]/tr[1]/td[1]/a')
print(element2)

브라우저 앞으로 및 뒤로

import time
from selenium import webdriver
# 声明Chrome浏览器对象
wb=webdriver.Chrome()

# 设置隐式等待时间,单位为秒
wb.implicitly_wait(10)
# 访问百度页面
wb.get("http://www.baidu.com")

time.sleep(5)
# 访问豆瓣
wb.get("https://www.douban.com/")
time.sleep(5)
# 返回上个页面
wb.back()
time.sleep(5)
# 前进到下个页面
wb.forward()

브라우저가 쿠키를 추가합니다.

from selenium import webdriver
# 声明Chrome浏览器对象
wb=webdriver.Chrome()

# 访问百度页面
wb.get("http://www.baidu.com")

# 获取当前的cookie
print(wb.get_cookies())

# 添加cookie
wb.add_cookie({'name': 'my_cookie', 'value': 'myCookie'})

# 获取设置的cookie
print(wb.get_cookie('my_cookie'))

# 删除设置的cookie
wb.delete_cookie('my_cookie')

프로그래머 및 투자 생활 기록은 WX 공식 계정과 동일한 프로그래머 Zhiqiu로 이름이 변경되었습니다. 주목해 주세요!

추천

출처blog.csdn.net/qq_25702235/article/details/130077660