I try the code
allSpanDate = self.driver.find_element_by_xpath("//span[text()='08/28']").click()
but only first element been clicked
so I edit like this but won’t work
allSpanDate = self.driver.find_element_by_xpath("//span[text()='08/28']") for spanDate in allSpanDate: spanDate.click()
website is
http://211.21.63.217:81/ticket_online.aspx
How to click all of the span text is 08/28 ?
from selenium import webdriver class CenturyasiaxinbeiSpider(scrapy.Spider): name = 'CenturyasiaXinbei' allowed_domains = ['www.centuryasia.com.tw', '211.21.63.217:81'] start_urls = ['http://211.21.63.217:81/ticket_online.aspx'] def __init__(self): print('__init__') self.driver = webdriver.Chrome('/Users/motogod19/chromedriver') self.driver.get('http://211.21.63.217:81/ticket_online.aspx') def parse(self, response): allSpanDate = self.driver.find_element_by_xpath("//span[text()='08/28']") for spanDate in allSpanDate: spanDate.click() time.sleep(10)
Advertisement
Answer
See, when you did this :
allSpanDate = self.driver.find_element_by_xpath("//span[text()='08/28']") for spanDate in allSpanDate: spanDate.click()
you must have got web element is not iterabel error.
that is due to you are using find_element
, try to use find_elements
.
also, I tried the below code in my local,
allSpanDate = driver.find_elements_by_xpath("//span[text()='08/28']") for spanDate in allSpanDate: ActionChains(driver).move_to_element(spanDate).perform() spanDate.click() time.sleep(1)
seems to do the job that you’ve been looking for.
Imports :
from selenium.webdriver.common.action_chains import ActionChains