0

Код:

private void login_Click(object sender, EventArgs e)
    {
        string login = textBox1.Text;
        string password = textBox2.Text;
        string steamguard = textBox3.Text;
    IWebDriver driver = new ChromeDriver();
    driver.Navigate().GoToUrl(@"https://steamcommunity.com/openid/login?openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.realm=https%3A%2F%2Fapi.dmarket.live&openid.return_to=https%3A%2F%2Fapi.dmarket.live%2Fauth%2Fv1%2Fcallback%2Fsteam%2F901e7d34-06c1-44b0-82b4-2f982c058361");

    IWebElement log = driver.FindElement(By.XPath("//*[@id=\"steamAccountName\"]"));
    IWebElement pass = driver.FindElement(By.XPath("//*[@id=\"steamPassword\"]"));
    IWebElement sign = driver.FindElement(By.XPath("//*[@id=\"imageLogin\"]"));
    IWebElement sguard = driver.FindElement(By.XPath("//*[@id=\"login_twofactor_authcode_entry\"]/div"));     

    log.SendKeys(login);
    pass.SendKeys(password);
    sign.Click();
    sguard.SendKeys(steamguard);

}

[![введите сюда описание изображения][1]][1]

Программа почему то не может ввести текст в строку и выдает ошибку; Как можно решить эту проблему. Спасибо).

введите сюда описание изображения

Пытался решить проблему:

  private void login_Click(object sender, EventArgs e)
    {
        string login = textBox1.Text;
        string password = textBox2.Text;
        string steamguard = textBox3.Text;
    IWebDriver driver = new ChromeDriver();
    driver.Navigate().GoToUrl(@"https://steamcommunity.com/openid/login?openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.realm=https%3A%2F%2Fapi.dmarket.live&openid.return_to=https%3A%2F%2Fapi.dmarket.live%2Fauth%2Fv1%2Fcallback%2Fsteam%2F901e7d34-06c1-44b0-82b4-2f982c058361");

    IWebElement log = driver.FindElement(By.XPath("//*[@id=\"steamAccountName\"]"));
    IWebElement pass = driver.FindElement(By.XPath("//*[@id=\"steamPassword\"]"));
    IWebElement sign = driver.FindElement(By.XPath("//*[@id=\"imageLogin\"]"));
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement sguard = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.XPath("//*[@id=\"twofactorcode_entry\"]")));

    log.SendKeys(login); 
    pass.SendKeys(password);
    sign.Click();
    sguard.SendKeys(steamguard);  

}

Но не помогло.

  • Вот можно поинтересоваться, зачем вам тут вообще селениум? Вы тестируете сайт или что? Для стима есть куча готовых решений, библиотек, которые умеют в 2fa, также стим весьма открыт в плане простых запросов. – EvgeniyZ Aug 07 '21 at 10:53
  • Возможно селениум и не нужен. Не подскажите, что можно прочитать для автоматической авторизации на сайте. – human03289 Aug 07 '21 at 11:08
  • Зависит от того, какие возможности вам нужны, что именно вы хотите получить. У стима есть API, часть функционала там открытая, часть требует API ключ. Если этого вам мало, то для C# есть SteamKit, который очень многое умеет (вот например ваш SteamGuard). Если и этого мало, то отлавливайте запросы и повторяйте их в программе. И помните, селениум это QA (тестирование), а не автоматизация! – EvgeniyZ Aug 07 '21 at 11:53
  • Мне просто нужно авторизоваться на сайте https://dmarket.com/ru. – human03289 Aug 07 '21 at 12:02
  • Я вам советую использовать простую авторизацию по логину и паролю, авторизация через стим (или другие соц. сети)) весьма геморная бывает. – EvgeniyZ Aug 07 '21 at 12:04
  • Дело в том, что этот сайт поддерживает только авторизацию через стим. – human03289 Aug 07 '21 at 12:13
  • А это что? Простая форма, даже API авторизации у сайта есть. Осталось разобраться что именно он требует (ссылка выше) и отправить это через простой HttpClient. Правда там ReCaptcha, с ней ух какие проблемы могут быть, но благо сайт просит ее не всегда. – EvgeniyZ Aug 07 '21 at 12:33
  • Спасибо за помощь. – human03289 Aug 07 '21 at 12:35

1 Answers1

0

Ну как бы div не умеет сам по себе принимать ввод.

Ввод надо отправлять в input, который может выглядеть примерно вот так:

<input type="text" name="code">

Он скорее всего расположен внутри того самого div, на который вы указали.

aepot
  • 49,560
  • Я поменял на IWebElement sguard = driver.FindElement(By.XPath("//*[@id="twofactorcode_entry"]")); но ошибка не исчезла. – human03289 Aug 07 '21 at 10:41
  • @human03289 это пока не значит, что мой ответ неправильный. Убедитесь, что sguard содержит именно тот инпут, который вы запросили. – aepot Aug 07 '21 at 16:07