闲着没事, 用selenium来模拟一下自动扫码登录, 代码是很简单的, 但是获取元素的时候, 有点迷惑了,很尴尬, selenium打开网页的时候是有 二维码的 src属性的, 但是 xpath匹配的时候却 死活提取不到, 很不理解啊, 原来以为有 iframe标签, 但是检查了一下, 什么都没有啊, 保存到本地的 html 文本也是有标签的。 最后只能这样来提取了!!!
driver.find_element_by_id("J_QRCodeImg").find_element_by_tag_name("img").get_attribute("src")
哪位大佬给我解解惑呗 !!!
下面这个就是死活提取不到的玩意
driver.find_element_by_xpath("//div[@id='J_QRCodeImg']/img/@src").text
。
from selenium import webdriver
import time
def login():
driver.get("https://www.taobao.com")
driver.maximize_window()
if driver.find_element_by_link_text("亲,请登录"):
""" 提取文本定位 如果用元素定位这里面比较麻烦, 当然元素定位绝对是可以的"""
driver.find_element_by_link_text("亲,请登录").click()
time.sleep(1)
if driver.find_element_by_id("J_QRCodeImg"):
# 定位到二维码图片
print ('====已定位到二维码图片====')
img_html = driver.find_element_by_id("J_QRCodeImg").get_attribute('innerHTML')
print(img_html) # <img src="//img.alicdn.com/tfscom/TB1kaM4CSzqK1RjSZFLwu3n2XXa.png"> 获取元素的 html文本内容
print(type(img_html)) # <class 'str'>
"""
# xpath 定位
img_html2 = driver.find_element_by_xpath("//*[@id='J_QRCodeImg']").get_attribute('innerHTML')
print(img_html2)
"""
print(driver.find_element_by_xpath("//div[@class='footer-hd']/p/a[6]").get_attribute("innerHTML"))
print(driver.find_element_by_xpath("//div[@class='footer-hd']/p/a[6]").text)
# 但是我测试了获取这个标签的html文本内容, 却没有获取到, 获取的还是文本、 有点迷茫 还望大神们指教
print(driver.find_element_by_id("J_QRCodeImg").find_element_by_tag_name("img").get_attribute("src"))
print("===提取二维码图片的链接===")
# print(driver.find_element_by_xpath("//div[@id='J_QRCodeImg']/img/@src").text)
# 这个是元素定位不到的 感觉很奇怪啊, 为啥没有呢
# with open("./taobao.html", "w", encoding="utf-8") as f:
# f.write(driver.page_source)
# 这个怎么保存成 html 不让它乱码 encoding = "gbk" 不行啊 网页是gbk的
print(driver.find_element_by_id("J_QRCodeImg").find_element_by_tag_name("img").get_attribute("src"))
url2 = driver.find_element_by_id("J_QRCodeImg").find_element_by_tag_name("img").get_attribute("src")
# 二维码链接, 直接获取就是完整的了 但是网页上是这 <img src="//img.alicdn.com/tfscom/TB1sMleCVzqK1RjSZFCwu2bxVXa.png">
print(url2) # https://img.alicdn.com/tfscom/TB1sMleCVzqK1RjSZFCwu2bxVXa.png
driver.get(url2)
while True:
try:
if driver.find_element_by_link_text("密码登录"):
print("请扫码登录...")
time.sleep(1)
except:
print ("成功登录...")
print (driver.current_url)
break
time.sleep(1)
if __name__ == '__main__':
driver = webdriver.Chrome()
login()