C#硒图像xpath下载

时间:2018-08-28 14:28:50

标签: c# selenium

我想使用Selenium通过XPath下载图像文件。但是我收到找不到文件的错误。

      var resimadresi =  driveri.FindElement(By.XPath("/html/body/table[3]/tbody/tr/td/center/table/tbody/tr[2]/td[2]/center/table/tbody/tr[1]/td[4]/table/tbody/tr/td[2]/img"));

        WebClient webClient = new WebClient();
        webClient.DownloadFile(resimadresi.Text, @"image.png");

2 个答案:

答案 0 :(得分:0)

尝试:

var resimadresi =  driveri.FindElement(By.XPath("//td[contains(text(), "Güvenlik Anahtarı")]/following-sibling::node()[img]"));
WebClient webClient = new WebClient();
webClient.DownloadFile(resimadresi.Text, @"image.png");

GüvenlikAnahtarı是我在验证码旁边看到的文本,可以随时将其替换为您在旁边看到的任何内容。我没有翻译成英文的选项,因此,我真的不能为xpath提供准确的文本。

答案 1 :(得分:0)

您无法使用图像的fetchin src做您想做的事情。因为在每个请求上图像都会更改。您可以为页面截图,并通过一些位图操作提取图像。

void SomeMethod() {
    var driver = new ChromeDriver();
    driver.Navigate().GoToUrl("https://ebildirge.sgk.gov.tr/WPEB/amp/loginldap");
    Screenshot ss = driver.GetScreenshot();

    byte[] screenshotAsByteArray = ss.AsByteArray;

    Bitmap bmp;
    using (var ms = new MemoryStream(screenshotAsByteArray))
    {
        bmp = new Bitmap(ms);
    }

    Bitmap cropped = cropAtRect(bmp, new Rectangle(530, 350, 60, 40));
    cropped.Save("test.jpeg", ImageFormat.Jpeg);
}

static Bitmap cropAtRect(Bitmap b, Rectangle r)
{
    Bitmap nb = new Bitmap(r.Width, r.Height);
    Graphics g = Graphics.FromImage(nb);
    g.DrawImage(b, -r.X, -r.Y);
    return nb;
}

这是下载的图片:

enter image description here