ChromeDriver는 Basic 인증 에이전트 → 다중 에이전트를 통해 해결할 수 없음
10523 단어 GochromedriverWebDriversquid
배경
ChromeDriver에서 IP 주소 제한이 있는 웹 사이트에 액세스하려면 Chrome 브라우저를 자동으로 조작해야 합니다.허용되는 고정 IP 주소를 가진 프록시 서버가 있기 때문에 이를 통해 사이트를 방문합니다.이 프록시 서버는 기본 인증 방법을 사용하여 인증을 해야 합니다.
그러나 크롬 드라이버는 프록시 연결 옵션이 있지만 인증 정보를 전달할 수 없는 것 같아 난국에 빠졌다.
그래서 나는 인증용 로컬 프록시 서버를 만들어서 해결하는 방법을 시도했다.
※ 코드는 Go로 작성되지만 해결 방법은 언어에 의존하지 않습니다.
필요한 물건
코드
많이 깎아서 간단하게 쓰면 이런 느낌이에요.agouti.
main.go
package main
import (
"github.com/sclevine/agouti"
"log"
)
func main() {
driver := agouti.ChromeDriver(agouti.ChromeOptions("args", []string{"--proxy-server=proxy.example.com:8888"}))
if err := driver.Start(); err != nil {
log.Fatal(err)
}
defer driver.Stop()
page, err := driver.NewPage()
if err != nil {
log.Fatal(err)
}
// 診断くんにアクセス
if err := page.Navigate("http://taruo.net/e/"); err != nil {
log.Fatal(err)
}
}
--proxy-server=proxy.example.com:8888
프록시 서버에 연결하기 위한 시작 옵션입니다.그러나 여기서 자격 증명 (사용자 이름과 암호) 을 지정할 수 없습니다.적어도 내가 조사하고 시도하는 것은 불가능하다.물론 계속 이렇게 실행하면 브라우저에서 인증 정보를 찾을 수 있습니다.이러면 자동화가 안 돼요.
로컬 에이전트 인증
브라우저에서 인증을 할 수 없기 때문에 브라우저와 프록시 서버(갑) 사이에 프록시 서버(을)를 하나 더 삽입하여 을에게 인증 정보를 불러옵니다.
ブラウザ -> 乙 (認証情報を載せるプロキシ) -> 甲 (認証が必要なプロキシ) -> サイト
따라서 을에 해당하는 로컬 프록시 서버를 구축하고 DockerSquid의 이미지 시작 용기를 설치하면 매우 빠르다(Docker가 없으면 OS에 Squid를 설치하십시오).docker pull sameersbn/squid:3.5.27
Suquid의 설정 파일은 여기 에서 적절하게 꺼내서 ~/squid/squid.conf
잠시 저장합니다.squid.conf
#defaults
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
프로필에 자격 증명을 첨부합니다.echo 'cache_peer {甲プロキシのホスト} parent {甲プロキシのポート番号} 0 no-query login={ユーザー名}:{パスワード}' >> ~/squid/squid.conf
echo 'never_direct allow all' >> ~/squid/squid.conf
docker run --name squid -d \
--publish 3128:3128 \
--volume ~/squid/squid.conf:/etc/squid/squid.conf \
--volume ~/squid/cache:/var/spool/squid \
sameersbn/squid:3.5.27
이렇게 localhost:3128
하면 개방적일이어야 하기 때문에 코드의 시작 옵션 부분을 --proxy-server=localhost:3128
으로 변경합니다.프로그램을 실행할 때
순조롭게 진행되었다.
참고 자료
Reference
이 문제에 관하여(ChromeDriver는 Basic 인증 에이전트 → 다중 에이전트를 통해 해결할 수 없음), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KNJ/items/7a9dbecfb26cd7ca0213텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)