所以我试着刮这一页:
https://www.tripadvisor.com/CheapFlightsHome
但是当我试图点击选择航班等级元素时,它只会给出这个错误:
File "e:\code\Python\non machine learning projects\web scrabbing\Projects\flight-anlaysis\flight-anlaysis.py", line 128, in <module>
extra_info("Economy" , 2 , 0 , 3)
File "e:\code\Python\non machine learning projects\web scrabbing\Projects\flight-anlaysis\flight-anlaysis.py", line 79, in extra_info
drop_down_btn = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH , '//span[@class = "ui_icon caret-down open-close"]')))
File "C:\Users\user\anaconda3\envs\mix\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Python代码:
def extra_info(wclass , noa , nos , noc):#noa : number of adults nos: number of seniors noc: number of children
# CLicking the main button
mbtn = driver.find_element(By.XPATH , '//span[@class = "summaryContainer target"]')
mbtn.click()
time.sleep(2)
mdiv = driver.find_element(By.XPATH , '//div[@class = "prw_rup prw_flights_cos_passenger_picker cosPassengerPopover"]')
time.sleep(2)
mmdiv = mdiv.find_element(By.XPATH , '//div[@class = "popoverContents"]')
wclassbtn = mmdiv.find_element(By.XPATH , '//div[@class = "picker-inner localizationCosStrings"]')
drop_down_btn = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH , '//span[@class = "ui_icon caret-down open-close"]')))
time.sleep(5)
drop_down_btn.click()
plane_grades = []
eco = driver.find_element(By.XPATH , '//@li[text() = "Economy"]')
peco = driver.find_element(By.XPATH , '//@li[text() = "Premium Economy"]')
bus = driver.find_element(By.XPATH , '//li[@text() = "Business Class"]')
fc = driver.find_element(By.XPATH , '//li[@text = "First Class"]')
plane_grades.append(eco , peco , bus , fc)
for plane , i in enumerate(plane_grades): # this for loop choses the class grade for the plane
if plane == wclass:
choosen_btn = plane_grades[i]
choosen_btn.click()
# checking now for the nos noa noc
adult_counter_div = driver.find_element(By.XPATH , '//div[@class = "adultCounter counter"]')
senior_counter_div = driver.find_element(By.XPATH , '//div[@class = "seniorCounter counter"]')
child_counter_div = driver.find_element(By.XPATH , '//div[@class = "childrenCounter counter"]')
if noa <= 6 and senior_counter_div<=6 and child_counter_div<=5: #Checking the count of the number of tickets
add_adult_btn = adult_counter_div.find_element(By.XPATH , '//span[@class = "ui_icon plus-circle enabled"]')
add_senior_btn = senior_counter_div.find_element(By.XPATH , '//span[@class = "ui_icon plus-circle enabled"]')
add_child_btn = child_counter_div.find_element(By.XPATH , '//span[@class = "ui_icon plus-circle enabled"]')
# Clicking the the button the number of times
for i in range(noa):
add_adult_btn.click()
for i in range(nos):
add_senior_btn.click()
for i in range(noc):
add_child_btn.click()
else:
print('MORE THAN THE LIMIT')
谢谢。
2条答案
按热度按时间izkcnapc1#
请尝试在预期条件下使用WebDriverWait
在此处查找更多详细信息-https://selenium-python.readthedocs.io/waits.html
kwvwclae2#
要在tripadvisor上的***From*字段中发送 * 字符序列
Bangalore
*,需要为element_to_be_clickable()引入WebDriverWait,可以使用以下locator strategies之一:浏览器快照: