4
有时,当我使用硒点击页面上的特定链接,点击经历,但网站并没有点击响应。例如,以下是我尝试在nba.com上的统计信息页面上的日期之间导航的情况。硒点击不触发网站(蟒蛇)事件
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import datetime
import time
def go_to_next_day(driver, next_date):
for elem in driver.find_elements_by_css_selector('.date-selector i'):
if 'right' in elem.get_attribute('class'):
print 'Found next day!'
elem.click()
break
else:
raise ValueError('Unable to navigate to the next day')
# wait 30 seconds until the next day loads
WebDriverWait(driver, 30).until(
ec.text_to_be_present_in_element((By.CSS_SELECTOR, '.date-selector > span'), next_date.strftime('%m/%d/%Y'))
)
if __name__ == '__main__':
# go to nba.com
driver = webdriver.Firefox()
driver.set_window_size(2560, 1600)
driver.get('http://stats.nba.com/scores/#!/10/03/2014')
print 'NBA.com loaded. Clicking to next day!!!'
end_date = datetime.datetime.now()
current_date = datetime.datetime.strptime('2014-10-03', '%Y-%m-%d')
# after page loads, just click right until you get to current date
while current_date <= end_date:
# do something interesting on the page, modeled as a sleep
time.sleep(1)
next_date = current_date + datetime.timedelta(days=1)
go_to_next_day(driver, next_date)
current_date = next_date
print 'Went to day {}'.format(current_date)
driver.quit()
print 'Done'
为什么脚本总是点击,但网站有时只是改变页面?是否something to do with angular?我怀疑它与操作系统有什么关系,但我在Mac OS X上。
我不确定并且真的很想弄清楚如何避免点击失败,特别是因为我我想点击并以硒的方式等待。
因此,在这种情况下,有一个元素,我可以直视,以确保页面加载正常。如果没有像div.loader这样的元素会怎么样? 另外什么是使用ActionChains优于点击? –
@AkshayDongaonkar这个问题实际上是网站特定的。我通常会使用这个“窍门”,等待加载过程中出现“加载”图标/微调器等隐形功能。更经常地,我只是等待所需的内容出现 - 明确地等待容器的可见性/存在与期望的数据。 – alecxe
@AkshayDongaonkar在这种情况下,动作链有助于将鼠标悬停在元素上,然后单击 - 有时有助于解决“单击”问题。我很确定你实际上不需要在这里的行动链。 – alecxe