点击带有selenium的下拉菜单,废料不起作用

时间:2015-07-17 12:51:03

标签: javascript python selenium web-scraping scrapy

我想从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()

我希望有人可以帮助我。

感谢

2 个答案:

答案 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);

现在从下拉列表中选择值。