Python 如何使用selenium刮取Whatsapp web的元素
让我简单介绍一下这个问题,我想用我自己的whats应用程序web数据来获取我的抓取经验。 不幸的是,whats app web将其元素一次限制为12或10个元素,我对JavaScript不熟悉,因此我如何绕过whats app设置的限制获取所有必需的元素 提前感谢您的帮助 我的代码: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
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的扩展逻辑部分,代码会有所帮助。通过使用您的代码,它不会向下滚动到最下方,就像只滚动一次一样