1.定义用户名,密码(自行注册),设置页面加载策略,关闭selenium受控制chrome提示,确定需要访问的url。
from selenium import webdriver
USERNAME = "xxx"
PASSWORD = "xxx"
options = webdriver.Chromeoptions() # 实例化
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False) # 移除受chrome控制提示
option.page_load_strategy = 'eager' # 设置页面加载策略
browser = webdriver.Chrome(options=option)
browser.maximize_window() # 窗口最大化
url = "http://ticket.yes24.com/New/Perf/Detail/Detail.aspx?IdPerf=45494&Gcode=009_303"
browser.get('url')
2.进入url定义的网页中,利用selenium自动化测试和Xpath元素定位进行日期、场次,预定操作,并在网页弹窗提示下进行登录,再次确认以上信息,进入购票窗口。
# 当前点击事件短时间内生效
# 以后需要再运行此段代码,需对节点书否能够点击进行一个判断
browser.find_element(By.XPATH, '//*[@id="rncalendar"]/div/table/tbody/tr[2]/td[7]').click()
browser.find_element(By.XPATH, '//*[@id="mainForm"]/div[10]/div/div[4]/a[4]').click()
browser.switch_to.alert.accept() # 当选好日期场次时,预定,网页弹出登录提示,确认弹窗,跳转登录
time.sleep(1)
# 输入用户名
browser.find_element(By.XPATH, '//*[@id="SMemberID"]').click()
browser.find_element(By.XPATH, '//*[@id="SMemberID"]').send_keys(USERNAME)
browser.find_element(By.XPATH, '//*[@id="SMemberID"]').send_keys(Keys.TAB)
time.sleep(1)
# 输入密码
# 密码进行了特殊处理,普通定位无法输入
pwd = browser.find_element(By.XPATH, '//*[@id="spanMemPW"]')
ActionChains(browser).send_keys_to_element(pwd, PASSWORD).perform()
# 点击登录
browser.find_element(By.XPATH, '//*[@id="btnLogin"]/span').click()
WebDriverWait(driver=browser, timeout=2) # 显示等待
# 登陆后再次确认日期、场次。预定,进入下一个窗口
browser.find_element(By.XPATH, '//*[@id="rncalendar"]/div/table/tbody/tr[2]/td[7]').click()
browser.find_element(By.XPATH, '//*[@id="PerfPlayTime"]/a').click()
browser.find_element(By.XPATH, '//*[@id="mainForm"]/div[10]/div/div[4]/a[4]').click()
browser.find_element(By.CSS_SELECTOR, '.rn-bb03').click()
WebDriverWait(driver=browser, timeout=2) # 显示等待
3.此时进入一个新的窗口,需要通过句柄来切换窗口。(网页源代码中并无iframe标签,无法通过切换iframe来进行切换)
# 通过句柄切换操作窗口
handles = browser.window_handles
browser.switch_to.window(handles[-1])
time.sleep(2)
# 进入新窗口之前,已经确认的日期等信息已经默认选好,只需点击下一步
browser.find_element(By.XPATH,'//div//div[@id="StateBoard"]//div[@id="StepCtrlBtn01"]/a').click()
# 之后需要切换到新窗口的iframe中操作
browser.switch_to.frame("ifrmSeatFrame") # 切换iframe
# 在选座界面获取未被购买座位的信息,为下一步选座做准备,response时一个element列表
response = browser.find_elements(By.XPATH, '//div[@id="divSeatArray"]/div')
# 通过for循环输入并选择座位,此处为快速实现效果,选择了第一处未出售空位,自行选择需要改写for循环
# 需要的信息不一定存在标签的文本中,也可能时标签的属性值,需要用到xx,get_attribute('属性名')方法for i in response:
if i.get_attribute('title'):
print("座位编号:", i.get_attribute('value'))
print("座位:", i.get_attribute('title'))
i.click()
break
browser.find_element(By.XPATH,'//[@id="form1"]/div[3]/div[2]/div/div[2]/p[2]/a/img')
.click()
time.sleep(1)
4.第三步已经完成了选座操作,接下来就要获取一些基本信息
# 购买信息需要切换iframe才能够获取,否则即便在网页中使用Xpath helper能够获取到需要的信息,在代码中# 也无法实现,只会报错未定位到该元素,下面同样使用xx,get_attribute('属性名')方法
browser.switch_to.default_content() # 切回原iframe
Id_Hall = browser.find_element(By.XPATH, '//div[@id="warp"]//div[@id="step01_time"]//ul[@id="ulTime"]/li').get_attribute('idhall')
print("IdHall:", Id_Hall)
Id_Time = browser.find_element(By.XPATH, '//div[@id="warp"]//div[@id="step01_time"]//ul[@id="ulTime"]/li').get_attribute('value')
print("IdTime:", Id_Time)
commission = browser.find_element(By.XPATH, '//div[@id="StateBoard"]//div//ul//li[@class="tk_charge"]//span')
print("手续费:", commission.text)
freight = browser.find_element(By.XPATH, '//div[@id="StateBoard"]//div//ul//li[@class="tk_deli"]//span')
print("运费:", freight.text)
browser.quit()
文章来源地址https://www.toymoban.com/news/detail-735846.html
文章来源:https://www.toymoban.com/news/detail-735846.html
到了这里,关于selenium获取ticket.yes24.com信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!