【问题标题】:Scraping JS pages with selenium/bs4使用 selenium/bs4 抓取 JS 页面
【发布时间】:2016-10-13 01:31:30
【问题描述】:

我正在尝试使用 selenium 和 bs4 抓取 instagram(不,我没有使用 api)主题标签,但不断收到错误消息:

“元素当前不可交互,可能无法操作”

我已经尝试等待页面加载,但无论我做什么,我都会得到一个空白的打印语句或那个错误。我已经搜索并发现了一些过时的答案,所以我决定最后在这里问。

def scrape(browser):

browser.get("https://www.instagram.com/instagram/")
tag = input("Enter a hashtag you would like to search: ")

# ig search bar
search = browser.find_element_by_css_selector('._9x5sw')
if tag != '#':
    search.send_keys('#' + tag)
else:
    search.send_keys(tag)

# scrape IG hash tags
soup = BeautifulSoup(browser.page_source, 'html.parser')
time.sleep(5)
for soup in soup.find_all('a', {'class': '_k2vj6'}):
    print(soup)

【问题讨论】:

    标签: python-3.x selenium-webdriver beautifulsoup


    【解决方案1】:

    我能够让它工作(同时使用 firefox 和 phantomjs)

    from selenium import webdriver
    from bs4 import BeautifulSoup
    import time
    
    if __name__ == '__main__':
        tag = input("Enter a hashtag you would like to search: ")
        url = 'https://www.instagram.com/instagram/'
        driver = webdriver.PhantomJS('<yourPathToPhantomJS>')
        driver.set_window_size(1124, 850)
        # driver = webdriver.Firefox()
        driver.get(url)
        search = driver.find_elements_by_tag_name('input')
        if tag != '#':
            search[0].click()
            search[0].send_keys('#' + tag)
        else:
            search[0].send_keys(tag)
        time.sleep(10)
        html = driver.page_source
        soup = BeautifulSoup(html)
        links = soup.find_all('a', {'class': '_k2vj6'})
        for link in links:
            print(link)
    

    两个尼特:

    • 我必须设置浏览器的窗口大小才能在 phantomJS 中工作
    • 对于我的一些测试,5 秒不足以加载下拉菜单。

    【讨论】:

    • 感谢工作人员!所以问题是让页面加载时间超过 5 秒?还有为什么搜索变量的索引为 [0]?
    • 如果您使用的是 phantomJS,那么问题可能是窗口大小需要触发页面中的某些内容以激活输入标签。在添加该行之前,我遇到了与您相同的错误。而且,搜索中的索引 [0] 仅仅是因为我使用了find_elements_by_tag_name 而不是find_element_by_tag_name
    【解决方案2】:

    这个how-to make it live DOM and loaded js so,享受并节省您的搜索时间,这个想法是获取整个身体,如果你也想用头部替换身体,它将与硒一样。

    options = Options()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    dri = webdriver.Chrome(options=options)
    html = dri.find_element_by_tag_name("body").get_attribute('innerHTML')
            soup = BeautifulSoup(html, features="lxml")
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2019-09-03
      • 2020-03-24
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2020-09-04
      • 2018-11-08
      相关资源
      最近更新 更多