selenium bổ sung
Chờ đợi nguyên tố thêm tái
selenium trung chờ đợi phương pháp
time.sleep()
- Mạnh mẽ chờ đợi, bất luận nguyên tố hay không thêm tái ra tới, đều cần chờ
web.implicitly_wait()
- Thiết trí sau toàn cục sử dụng, mặt sau nguyên tố cam chịu tuân thủ chờ đợi.
- Nếu không thêm tái ra tới, sẽ chờ đợi một đoạn thời gian.
- Nếu nguyên tố thêm tái ra tới, liền không cần chờ
WebDriverWait
- Bộ phận sử dụng, đơn độc chờ một cái nguyên tố
- Nếu xuất hiện, liền không cần chờ đợi
- Nếu chờ đợi trong lúc không có xuất hiện, siêu lúc ấy báo sai.
fromseleniumimportwebdriver
fromselenium.webdriver.supportimportexpected_conditionsasEC
fromselenium.webdriver.common.byimportBy
fromselenium.webdriver.support.waitimportWebDriverWait
web=webdriver()
# chờ đợi 10 giây, 0.5 giây đi xem một lần
ele=WebDriverWait(web,10,0.5).until(
# chờ đợi xpath đường nhỏ hạ nguyên tố xuất hiện, một khi xuất hiện, kết thúc chờ đợi
EC.presence_of_element_located((By.XPATH,"/html/body/div[5]/div[2]/div[1]/div/div"))
)
Ví dụ thực tế 1
importbase64# hình ảnh chuyển thành byte mã xuyến, ở trên mạng truyền
importjson
importtime
fromselenium.webdriverimportActionChains
fromselenium.webdriver.supportimportexpected_conditionsasEC
importrequests
fromlxmlimportetree
fromselenium.webdriver.common.byimportBy
fromselenium.webdriver.support.waitimportWebDriverWait
fromseleniumimportwebdriver
# sách tranh nghiệm chứng mã loại
classVerifyCode():
def__init__(self,username="Username",password=' mật mã '):
self.username=username
self.password=password
# loại hình 18 phân biệt, chỗ hổng phân biệt ( yêu cầu 2 trương đồ một trương mục tiêu đồ một trương chỗ hổng đồ )
defverify_ chỗ hổng(self,img,img_back):
typeid=18
withopen(img,'rb')asf:
base64_front_data=base64.b64encode(f.read())
b64_front=base64_front_data.decode()
withopen(img_back,'rb')asf:
base64_bg_data=base64.b64encode(f.read())
b64_bg=base64_bg_data.decode()
data={"username":self.username,"password":self.password,"typeid":typeid,"image":b64_front,"imageback":b64_bg}
result=json.loads(requests.post("http://api.ttshitu /predict",json=data).text)
ifresult['success']:
returnresult["data"]["result"]
else:
returnresult["message"]
# đơn chỗ hổng phân biệt ( phản hồi X trục tọa độ chỉ cần 1 trương đồ )
defverify_ đơn chỗ hổng(self,img):
typeid=33
withopen(img,'rb')asf:
base64_front_data=base64.b64encode(f.read())
base64_img=base64_front_data.decode()
data={"username":self.username,"password":self.password,"typeid":typeid,"image":base64_img}
result=json.loads(requests.post("http://api.ttshitu /predict",json=data).text)
ifresult['success']:
returnresult["data"]["result"]
else:
returnresult["message"]
# 1 ~ 4 cái tọa độ
defverify_ điểm đánh(self,img):
typeid=27
withopen(img,'rb')asf:
base64_front_data=base64.b64encode(f.read())
base64_img=base64_front_data.decode()
data={"username":self.username,"password":self.password,"typeid":typeid,"image":base64_img}
result=json.loads(requests.post("http://api.ttshitu /predict",json=data).text)
ifresult['success']:
returnresult["data"]["result"]
else:
returnresult["message"]
# đăng nhập trang web
deflogin(username="xxxx",password="xxxx"):
# 1. Hoàn thành đăng nhập
login_url="https://login.zhipin /?ka=header-login"
web=webdriver.Chrome()
time.sleep(3)
web.get(login_url)
web.find_element_by_xpath('//*[@id= "wrap" ]/div[2]/div[1]/div[2]/div[1]/form/div[3]/span[2]/input').send_keys(username)
web.find_element_by_xpath('//*[@id= "wrap" ]/div[2]/div[1]/div[2]/div[1]/form/div[4]/span/input').send_keys(password)
web.find_element_by_xpath('//*[@id= "pwdVerrifyCode" ]/div').click()
ele=WebDriverWait(web,10,0.5).until(
EC.presence_of_element_located((By.XPATH,"/html/body/div[5]/div[2]/div[1]/div/div"))
)
# đối tìm được xpath nguyên tố tiến hành chụp hình, cũng mệnh danh là
ele.screenshot("Hình ảnh nghiệm chứng.png")
# điểm đánh nguyên tố loại hình ảnh nghiệm chứng, ví dụ thực tế loại, dùng loại trung phương pháp
result=VerifyCode().verify_ điểm đánh("Hình ảnh nghiệm chứng.png")
points=result.split("|")
forpointinpoints:
ps=point.split(",")
x=int(ps[0])
y=int(ps[1])
# động tác liên
ActionChains(web).move_to_element_with_offset(ele,x,y).click().perform()
time.sleep(1)
web.find_element_by_xpath('/html/body/div[5]/div[2]/div[1]/div/div/div[3]/a/div').click()
time.sleep(2)
web.find_element_by_xpath('//*[@id= "wrap" ]/div[2]/div[1]/div[2]/div[1]/form/div[6]/button').click()
time.sleep(3)
# thu hoạch trang web nguyên mã
defget_page_source(url):
# đổ bộ trang web
login()
# thu hoạch cookies
web.get_cookies()
web.get(url)
# ẩn thức chờ đợi 20 giây trang web thượng xpath nguyên tố xuất hiện
ele=WebDriverWait(web,20).until(
EC.presence_of_element_located((By.XPATH,"//ul[@class='job-list-box']//span[@class='job-name']/a/text()"))
)
# xem xét thu hoạch nguyên mã, cũng viết nhập văn kiện ab.html trung
print(web.page_source)
i=True
withopen('ab.html','w',encoding='utf-8')asf:
ifi==True:
f.write(web.page_source)
i=False
returnweb.page_source
if__name__=='__main__':
web=webdriver.Chrome()
foriinrange(1,10):
url=f "https:// zhipin /c101010100/?query= Python &page={i}&ka=page-{i}"
print(url)
content=get_page_source(url)
tree=etree.HTML(content)
job_names=tree.xpath("//ul[@class='job-list-box']//span[@class='job-name']/a/text()")
print(job_names)
print(f "Đang ở trảo lấy đệ{i}Trang ")
Nhảy qua hoạt khối kiểm tra đo lường
Nghiệm chứng mã chi hoạt khối kiểm tra đo lường, nhảy qua trình duyệt kiểm tra đo lường thiết trí
# 88 phiên bản về sau có thể dùng
option=Options()
# option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')
web=Chrome(options=option)