import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
Options = webdriver.ChromeOptions()
Options.add_experimental_option('detach', True)
# 若网速慢,可以添加不加载图片设置
lol_html = webdriver.Chrome(service=Service(executable_path='.\chromedriver.exe'), options=Options)
URL = 'https://tb.alicdn.com/snapshot/index.html'
lol_html.get(url=URL)
time.sleep(2)
# lol_html.maximize_window()
# 不同浏览器复制出来的selector可能不同
login_button = lol_html.find_element(
By.CSS_SELECTOR,
'body > div.screen-outer.clearfix > div.main > div.main-inner.clearfix > div.col-right > div.tbh-user.J_Module > div > div.member-ft > div.member-logout.J_UserMemberLogout > a.btn-login.ml1.tb-bg.weight')
# 点击事件
'''
原因:在点击某个元素时,有其他元素(例如遮罩层、弹窗、广告等)在你想要点击的元素上方,
导致selenium点击了阻挡的元素
login_button.click()
解决办法目前有两种:1.使用显性等待
2.使用JavaScript点击
附加:若想要点击的元素在视窗之外,selenium可能无法点击它,可以使用execute_script来滚动页面
'''
# 第二种方法
element = lol_html.find_element(By.CLASS_NAME, 'btn-login')
lol_html.execute_script('arguments[0].click();', element)
"""
在进行某个事件,出现的新的页面后,selenium并不会自动切换到新的页面,得手动调
windows.handles:查看目前浏览器存在的标签页,返回一个列表
switch_to.window:切换标签页
"""
lol_html.switch_to.window(lol_html.window_handles[-1])
from selenium.webdriver.support.wait import WebDriverWait # 导入显示等待模块
from selenium.webdriver.support import expected_conditions as EC # 导入期望模块
WebDriverWait(lol_html, 60).until(
EC.text_to_be_present_in_element(
(By.CSS_SELECTOR,
'body > div.screen-outer.clearfix > div.main > div > div.col-right > div.tbh-user-container > div > div > div.J_UserMemberWrap.member-bd.member-bd-login > a.J_UserMemberNickUrl.member-nickurl > span > strong.J_UserMemberNick.member-nick'),
'tb298181745'
)
)
cookies = lol_html.get_cookies() # 获取cookie信息
# print(cookies, type(cookies)) # <class 'list'>
with open(r'.\cookies.txt', 'w', encoding='utf-8') as fc:
fc.write(str(cookies))
# with open(r'.\cookies.txt', 'r', encoding='utf-8') as fc:
# f = fc.read()
# print(f, type(f)) # <class 'str'>
12-05
429
05-09