自动无法在Webdriver中单击元素(python)

时间:2018-12-10 21:57:45

标签: python webdriver chromium

我正在尝试编写一个Python脚本,该脚本将从网页自动下载表格。当我只是转到指定的url地址时,表未完全加载。我必须单击链接“加载更多”。我试图通过脚本来做到这一点。

delay = 2
driver = webdriver.Chrome('chromedriver')
driver.get("url")
time.sleep(delay + np.random.rand() )
click_except = 0
while click_except == 0:
try:
    driver.find_element_by_id("id").click()
        time.sleep(delay + np.random.rand() )
    except:
        click_except = 1
time.sleep(delay + np.random.rand() )
web = driver.find_element_by_id("id_table")
str = (web.text)

以前可以使用,但现在不起作用...相同的代码!我搬到另一个国家,并且使用了不同的Wi-Fi。这会产生影响吗?实际上,单独和手动处理时,带有click命令的行仍然有效。它不与While and Try周期一起使用。知道有什么问题吗?或任何想法,如何更好地进行编程?

延迟应使网页有足够的时间上载。

1 个答案:

答案 0 :(得分:0)

我建议您避免等待一段时间,最好等待特定元素并且硒支持它,请检查:https://selenium-python.readthedocs.io/waits.html#explicit-waits

您可以执行以下操作:

driver = webdriver.Chrome('chromedriver')
driver.get('url')
wait_for_id('id').click()
str = wait_for_id('id_table').text

def wait_for_id(identifier):
    """
    It waits for web element with identifier
    :return: found selenium web element
    """
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, identifier))
    )
    return element