Python + Selenium:等到元素完全加载

时间:2018-05-22 13:12:17

标签: python selenium selenium-webdriver webdriver webdriverwait

所以我一直试图在Selenium中使用被称为的函数:

TextBox

在我开始说出这个问题之前。我正在尝试做的Selenium是基本上制作一个Selenium自动写入这张图片中的论坛:

TextBoxMask extension

这不是任何并发症。然而,每当我按下“Skapa Konto”时,它会加载并等待直到出现新页面:

Pic1

以上是上图。我的想法是,我希望它应该等到它给我那个“图片”(这是相同的链接,所以它不做任何更改)所以我认为最好做的是等到文本等“FORTSÄTT或者HELLO“是浏览器。然后继续。

但是,我在尝试使用它时遇到了问题。原因是它不会等到它发现但是立即进行其他不应该做的事情。现在它只是跳过等待,就像功能不起作用或根本没有。我做错了什么?

更新

我所知道的是,无论何时我尝试在网站上注册 - 网站都没有改变意义,当它成为一个成功的帐户时,它会带我到一个新页面。但它会自动刷新并说它已经成功。所以意味着我想以某种方式制作某种东西,以便检查并查看页面是否发生了新的事情。如果没有,请再试一次,然后再试一次?......那样的东西?

我会做的是检查是否有:

TextBoxMask

wait = WebDriverWait(browser, 20).wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button')))
wait.click()

然而问题就像我说的那样,每当我按下“SKAPA KONTO”时 - 它只是等待服务器进行双重检查,然后自动刷新页面并说成功。

1 个答案:

答案 0 :(得分:3)

首先,我坚信你非常接近。您只需要在 Pythonic 中格式化代码,这可以直接解决您的问题,如下所示:

__global__ void child_kernel (void) {}
__global__ void parent_kernel (void) 
{
    if (blockIdx.x == 0)
    {
        cudaStream_t s;
        cudaStreamCreateWithFlags(&s, cudaStreamNonBlocking);

        child_kernel <<<1,10,0,s>>> ();
        cudaStreamDestroy(s);
    }
    cudaDeviceSynchronize();
}
for (int i=0; i<10; i++)
{
    cudaStream_t s;
    cudaStreamCreateWithFlags(&s, cudaStreamNonBlocking);

    parent_kernel <<<10,10,0,s>>> ();
    cudaStreamDestroy(s);
}
cudaDeviceSynchronize();

通过提及它不会等到它发现但是立即执行其他不应该的东西而不是提及你的程序应该是什么来解决实际问题。 do(例如你的代码试验)以及你的程序做了什么错误(即错误堆栈跟踪)。

根据您共享的 HTML ,您可以为 WebElements 中的任何一个引导服务员,如下所示:

  • 服务员可以看到文字NUÄRDUMEDLEM,你好。

    • CSS_SELECTOR:

      WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button'))).click()
      
    • XPATH:

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.confirmation-title.nsg-font-family--platform.nsg-text--black.edf-title-font-size--xlarge.js-confirmationTitle")))
      
  • 服务员找到文字FORTSÄTT的按钮:

    • CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle' and contains(.,'NU ÄR DU MEDLEM, Hello.')]")))
      
    • XPATH:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.nsg-button.nsg-bg--black.register-next-step-cta.js-nextStepCta")))