【问题标题】:C#+Selenium web scrapingC#+Selenium 网页抓取
【发布时间】:2018-12-03 11:07:29
【问题描述】:

我想从https://zakup.sk.kz抓取一些数据。

首先,我初始化我的浏览器:

IWebDriver browser = new ChromeDriver();
        browser.Navigate().GoToUrl("https://zakup.sk.kz/#/ext?tabs=lot&adst=PUBLISHED&lst=PUBLISHED&page=1");

之后,我点击了框架:

IWebElement click = browser.FindElement(By.ClassName("m-found-item__num"));
        click.Click();

在这个框架中存在我想要抓取的数据(我找到了 abs 路径):

IWebElement tru = browser.FindElement(By.XPath("/html[1]/body[1]/ngb-modal-window[1]/div[1]/div[1]/sk-main-dialog[1]/div[2]/div[6]/div[1]/div[1]/div[7]"));
        Console.WriteLine(tru.Text);

在此之后,我需要切换到具有相同结构的下一帧,并刮取数据:

IWebElement next = browser.FindElement(By.XPath("//div[contains(@class, 'm-modal__arrow')]"));
        next.Click();
IWebElement tru2 = browser.FindElement(By.XPath("/html[1]/body[1]/ngb-modal-window[1]/div[1]/div[1]/sk-main-dialog[1]/div[2]/div[6]/div[1]/div[1]/div[7]"));
        Console.WriteLine(tru2.Text);

但是Selenium没有找到tru2,不知道为什么,因为每一帧的结构都一样?请告诉我,我该怎么办?

【问题讨论】:

  • 您尝试自动化手动步骤是什么?
  • 我想用 Selenium 训练废料数据,之后我会考虑自动化。
  • 我的任务是从这个站点删除数据:zakup.sk.kz。一页大概有10帧,每个帧都有这个数据,我从第一帧找数据,但是到第二帧的代码不行。

标签: c# selenium web-scraping


【解决方案1】:

当你点击next箭头时,当前元素将在Ajax请求完成后被删除和添加,这里你需要WebDriverWait

IWebElement next = browser.FindElement(By.XPath("//div[contains(@class, 'm-modal__arrow')]"));
        next.Click();

// wait max 15 seconds
IWait wait = new WebDriverWait(browser, TimeSpan.FromSeconds(15))
IWebElement tru2 = wait.Until(browser => browser.FindElement(By.XPath("(//div[@class="m-infoblock__layout"])[7]")));
        Console.WriteLine(tru2.Text);

注意我使用的是 Xpath

(//div[@class="m-infoblock__layout"])[7]

【讨论】:

  • 谢谢你,先生!但是这个 Iwait 等待不起作用,我使用 browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
猜你喜欢
  • 2021-05-19
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多