【问题标题】:Screen scraping with selenium 8用 selenium 8 刮屏
【发布时间】:2015-03-30 19:01:10
【问题描述】:

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.PhantomJS()
browser.set_window_size(1120, 550)
browser.get("http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html")

username = browser.find_element_by_id("navbar_username")
password = browser.find_element_by_name("vb_login_password_hint")

username.send_keys("user")
password.send_keys("password")

browser.find_element_by_class_name("loginbutton").click()

wait = WebDriverWait(browser, 10)
wait.until(EC.visibility_of_element_located((By.XPATH, '//h2[contains(., "Redirecting")]')))
wait.until(EC.title_contains('Kenyan & Tanzanian'))


link = browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]')
link.click()
browser.save_screenshot('screenie.png')
print 'success!!'
browser.close()

对于这个 HTML 代码:

<div class="vbseo_liked">
<a href="http://www.jamiiforums.com/member.php?u=8355" rel="nofollow">Nyaralego</a>
,
<a href="http://www.jamiiforums.com/member.php?u=8870" rel="nofollow">Sikonge</a>
,
<a href="http://www.jamiiforums.com/member.php?u=8979" rel="nofollow">Ab-Titchaz</a>
and
<a onclick="return vbseoui.others_click(this)" href="http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html#">11 others</a>
like this.
</div>

我希望能够点击此链接:

 <a onclick="return vbseoui.others_click(this)" href="http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html#">11 others</a>

然后在页面被点击后对其进行截图。当我运行代码时,我一直遇到这个错误。

selenium.common.exceptions.NoSuchElementException: Message: {"errorMessage":"Unable to find element with class name 'vbseo_liked'"

【问题讨论】:

    标签: python html selenium selenium-webdriver web-scraping


    【解决方案1】:

    您需要在点击之前等待帖子列表加载

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    browser = webdriver.PhantomJS()
    browser.maximize_window()
    browser.get("http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html")
    
    username = browser.find_element_by_id("navbar_username")
    password = browser.find_element_by_name("vb_login_password_hint")
    
    username.send_keys("username")
    password.send_keys("password")
    
    browser.find_element_by_class_name("loginbutton").click()
    
    wait = WebDriverWait(browser, 10)
    wait.until(EC.visibility_of_element_located((By.XPATH, '//h2[contains(., "Redirecting")]')))
    wait.until(EC.title_contains('Kenyan & Tanzanian'))
    wait.until(EC.visibility_of_element_located((By.ID, 'postlist')))
    
    link = browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]')
    link.click()
    
    browser.save_screenshot('screenie.png')
    print 'success!!'
    browser.close()
    

    请注意,生成的屏幕截图会非常大(磁盘上大约 39 MB)。

    【讨论】:

    • 再次感谢您的回答。我一直收到超时错误。 selenium.common.exceptions.TimeoutException:可能是因为它永远不会到达那个页面吗?
    • @user3078335 hm 很有趣,不过它对我有用。例如,您可以用30 替换10 吗? (11 others 页面加载确实需要时间)
    • @user3078335 嗯,好的,它在哪一行失败了?谢谢。
    • 文件“sele.py”,第 19 行,在 中 wait.until(EC.visibility_of_element_located((By.XPATH, '//h2[contains(., "Redirecting")]' ))) 文件“/Library/Python/2.7/site-packages/selenium/webdriver/support/wait.py”,第 75 行,直到引发 TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message :
    • @user3078335 您是否提供了正确的用户名和密码? :)
    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2013-09-21
    • 2019-07-12
    相关资源
    最近更新 更多