我想从http://www.squawka.com/match-results抓取数据。首先,我想在下拉菜单中选择联盟,例如美洲,德甲联赛。我的代码选择了The Americas,但新数据未加载。我认为背景中有一些javascript没有启动。
这里的代码。我使用scrapy和selenium与chromedirver但我测试了firefox驱动程序也没有成功。
import scrapy
from squawka.items import SquawkaItem
from scrapy.http import FormRequest, Request
from selenium import selenium
from selenium import webdriver
import time
class SquawkaSpider(scrapy.Spider):
name = "squawka"
allowed_domains = ["squawka.com"]
start_urls = ["http://www.squawka.com/match-results"]
def __init__(self):
self.driver = webdriver.Chrome(executable_path='/Users/fabian/chromedriver')
def parse(self, response):
self.driver.get(response.url)
time.sleep(5)
Dropdown = self.driver.find_element_by_xpath("//*[@id='league-filter-list']/option[contains(text(), 'The Americas')]").click()
我希望有人可以帮助我。
感谢
答案 0 :(得分:0)
您的问题可以通过等待时间和Select()语句的组合来解决。 在这种情况下,你需要放一些等待时间。隐式/显式等待都可以在这里工作。我尝试过隐式等待。
我尝试使用以下代码,并从下拉列表中选择“The Americas”。
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class ChromeDriver {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("http://www.squawka.com/match-results");
System.out.println("Entered Url");
WebElement element1=driver.findElement(By.xpath("//*[@id='league-filter-list']"));
Select sel = new Select(element1);
sel.selectByVisibleText("The Americas");
System.out.println("The Americans is selected");
}
}
注意: - 应用程序的设计方式是,您从下拉列表中选择任何内容,然后再次切换回“前5个欧洲联赛”。但我可以选择“美洲”上面的代码。
答案 1 :(得分:0)
Because you are not switching to the frame .You have to switch to that Frame before selecting the value.
driver.switchTo()帧(name_or_id);
现在从下拉列表中选择值。