【问题标题】:"Current_url" function in Selenium (Python) shows wrong adressSelenium(Python)中的“Current_url”函数显示错误的地址
【发布时间】:2021-07-01 05:03:04
【问题描述】:

我正在尝试借助 Selenium 模块 (Python) 抓取网站 https://www.mdoffice.com.ua/。该站点需要输入登录名和密码,以获取特定信息,这就是为什么我只能使用 Selenium 进行抓取。下载主页并从此页面移至下一个链接后,我试图查看此页面的当前 url,但程序显示主页的 url,我无法从该页面抓取任何信息(只能抓取主页)。这种情况只在这个网站上,在其他网站上一切正常。代码示例如下。如何解决这个问题呢?谢谢!

示例 1

'''
from selenium import webdriver
import time

browser = webdriver.Chrome("D:\Programs\Chrome dr Selenium\chromedriver_90")
url = "https://www.mdoffice.com.ua/ru/amain.html"
browser.get(url)
time.sleep(3)
elem = browser.find_element_by_link_text("Инструкции MDOffice")
或 elem = browser.find_element_by_xpath("/html/body/div[3]/div[2]/div[2]/nav/ul[1]/li/a") -
结果一样
time.sleep(3)
elem.click()
print(browser.current_url)
结果:https://www.mdoffice.com.ua/ru/amain.html
结果应该是:https://www.mdoffice.com.ua/ru/aMDOFAQ.decl
'''

示例 2(这里一切正常)

'''

from selenium import webdriver
import time

browser = webdriver.Chrome("D:\Programs\Chrome dr Selenium\chromedriver_90")
url = "https://www.bbc.com/news"
browser.get(url)
time.sleep(3)
link_1 = browser.find_element_by_link_text("Business")
time.sleep(3)
link_1.click()
page_url = browser.current_url
print(page_url)
结果:https://www.bbc.com/news/business
'''

【问题讨论】:

    标签: python selenium web-scraping


    【解决方案1】:

    我认为在您的示例 1 中:单击后添加睡眠语句...所以它应该是这样的

    browser = webdriver.Chrome("D:\Programs\Chrome dr Selenium\chromedriver_90")
    url = "https://www.mdoffice.com.ua/ru/amain.html"
    browser.get(url)
    time.sleep(3)
    elem = browser.find_element_by_link_text("Инструкции MDOffice")
    # add below
    elem.click()
    time.sleep(3)
    print(browser.current_url)
    

    【讨论】:

    • 非常感谢,添加睡眠时间后一切正常。
    【解决方案2】:

    从点击链接到页面加载之间,您需要等待,因为页面可能由于各种原因需要时间来加载。等待页面加载,可以使用expected_conditions和WebDriverWait:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ec
    
    browser = webdriver.Chrome("D:\Programs\Chrome dr Selenium\chromedriver_90")
    url = "https://www.mdoffice.com.ua/ru/amain.html"
    browser.get(url)
    WebDriverWait(browser, 10).until(ec.element_to_be_clickable((By.LINK_TEXT, "Инструкции MDOffice")))
    browser.find_element_by_link_text("Инструкции MDOffice").click()
    
    page_loaded = ec.url_to_be("https://www.mdoffice.com.ua/ru/aMDOFAQ.decl")
    WebDriverWait(browser, 10).until(page_loaded)
    

    这将等待最多 10 秒钟,然后单击链接,然后最多等待 10 秒钟以加载页面。这通常比使用 time.sleep 更推荐,因为它使这段代码更稳定(并且在页面/元素加载速度比初始帖子中使用的 3 秒更快的情况下更快)

    【讨论】:

    • 非常感谢您的回答。您的代码运行良好。还有助于在点击后增加睡眠时间。
    • 乐于助人! :)
    猜你喜欢
    • 2018-05-24
    • 2023-03-04
    • 1970-01-01
    • 2019-05-05
    • 2014-01-29
    • 2018-08-31
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多