0


selenium获取ticket.yes24.com信息

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://blog.csdn.net/qq_53715682/article/details/130808532
版权归原作者 枫丶桦 所有, 如有侵权,请联系我们删除。

“selenium获取ticket.yes24.com信息”的评论:

还没有评论