Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用selenium刮取Whatsapp web的元素_Python_Selenium_Web Scraping_Scrapy - Fatal编程技术网

Python 如何使用selenium刮取Whatsapp web的元素

Python 如何使用selenium刮取Whatsapp web的元素,python,selenium,web-scraping,scrapy,Python,Selenium,Web Scraping,Scrapy,让我简单介绍一下这个问题,我想用我自己的whats应用程序web数据来获取我的抓取经验。 不幸的是,whats app web将其元素一次限制为12或10个元素,我对JavaScript不熟悉,因此我如何绕过whats app设置的限制获取所有必需的元素 提前感谢您的帮助 我的代码: def __init__(self): #self.cookies = [] chrome_options = Options() #for now dont do --headless

让我简单介绍一下这个问题,我想用我自己的whats应用程序web数据来获取我的抓取经验。 不幸的是,whats app web将其元素一次限制为12或10个元素,我对JavaScript不熟悉,因此我如何绕过whats app设置的限制获取所有必需的元素

提前感谢您的帮助

我的代码:

def __init__(self):
    #self.cookies = []
    chrome_options = Options()    #for now dont do --headless
    chrome_options.add_argument("user-data-dir=C:\\Users\\Unknown\\AppData\\Local\\Google\\Chrome\\User Data")
    chrome_options.add_experimental_option('detach', True)    # so, browser keeps open dont close

    chrome_path = which('chromedriver')
    driver = webdriver.Chrome(executable_path=chrome_path, options=chrome_options)
    driver.set_window_size(1920, 1080)

    driver.get("https://web.whatsapp.com")
    time.sleep(10)
    recentList = driver.find_elements_by_xpath("//div[@class='_2wP_Y']")
    print('\n\n RECENT LIST\n\n')
    print(recentList)
    #self.html = driver.page_source

def parse(self, response):
    pass
    #resp = Selector(text=self.html)

因此,似乎
div[@class=''u2wp\uy']
代表每个对话的
div
WhatsApp在一个视口中显示这些类的最大16,您必须向下滚动才能进入新的对话,但是
div[@class=''wp\u Y']
计数总是16!我将构建一个迭代逻辑,在该逻辑中,您为这些类中的每个16收集
WebElement
,并向下滚动事件,然后将next16添加到上一个列表中

recentList = driver.find_elements_by_xpath("//div[@class='_2wP_Y']") 
for list in recentList :
    driver.execute_script("arguments[0].scrollIntoView();", list )

您可以进一步扩展逻辑并添加一个函数,该函数只比较两个
WebElement
,并比较它们是否相等。如果为真,则表示您已经用尽了会话列表。

因此,似乎
div[@class=''wp\u Y']
表示每个会话的
div
WhatsApp在一个视口中显示这些类的最大16,您必须向下滚动才能进入新的对话,但是
div[@class=''wp\u Y']
计数总是16!我将构建一个迭代逻辑,在该逻辑中,您为这些类中的每个16收集
WebElement
,并向下滚动事件,然后将next16添加到上一个列表中

recentList = driver.find_elements_by_xpath("//div[@class='_2wP_Y']") 
for list in recentList :
    driver.execute_script("arguments[0].scrollIntoView();", list )


您可以进一步扩展逻辑并添加一个函数,该函数只比较两个
WebElement
,并比较它们是否相等。如果为真,则表示您已用尽对话列表。

就像手动操作一样。。。您可以使用Selenium生成这些相同的操作。(点击、等待等…)好吧,我可以,但是,我只能使用selenium点击每个元素,如果所有元素都显示了,whatsapp web由于其限制而没有显示,有没有其他方法可以只获取我需要的所有元素并绕过限制?请分享一些代码。如果这是一个与设计或架构相关的问题,那么如果你问进去,得到答案的机会会更好。快乐编码!当然,我会编辑整个问题,很抱歉给您带来不便。我已经和您手动分享了代码。。。您可以使用Selenium生成这些相同的操作。(点击、等待等…)好吧,我可以,但是,我只能使用selenium点击每个元素,如果所有元素都显示了,whatsapp web由于其限制而没有显示,有没有其他方法可以只获取我需要的所有元素并绕过限制?请分享一些代码。如果这是一个与设计或架构相关的问题,那么如果你问进去,得到答案的机会会更好。快乐编码!当然,我会编辑整个问题,很抱歉给您带来不便。我已经分享了代码谢谢您的时间,您能简要介绍一下执行脚本的参数吗?在当前窗口中执行
JavaScript
。或者,您可以使用和
操作。将\u移动到\u元素(desiredWebElement)
请您解释一下比较两个WebElement的扩展逻辑部分,代码将有助于使用您的代码,它不会向下滚动到最下方,就像它只滚动一次感谢您的时间,您能向我简要介绍一下执行脚本的参数吗?在当前窗口中执行
JavaScript
,您可以使用和
操作。将\u移动到\u元素(desiredWebElement)
请您解释一下比较两个WebElement的扩展逻辑部分,代码会有所帮助。通过使用您的代码,它不会向下滚动到最下方,就像只滚动一次一样