我正在按照一个教程创建一个可以在任何网页上执行任务的机器人。我正在使用Python3搜索任意一个随机网站,然后使用搜索结果(从那个网站)打印数据。我已经导入了一个selenium webdriver,并确保它的设置正确。
我面临的问题是我试图创建一个循环搜索结果的for循环。这个for循环使用的是我正在测试的网站中的类名--这样bot就可以识别文章元素了。问题是类名为:C-entry-box--compact__title,这导致语法错误:无法分配到文字
有什么办法可以绕过这个吗?此网站的搜索结果没有任何其他较短的类名或ID,也没有包含连字符或下划线。我正在测试网站“TheVerge's”的搜索结果上运行我的代码。
相关代码:
try:
main = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "c-entry-box--compact__body"))
)
articles = main.find_element_by_class_name("c-entry-box--compact__title")
for "c-entry-box--compact__title" in articles:
header = articles.find_element_by_class_name("c-entry-box--compact__title")
print(header.text)
finally:
driver.quit()
任何提示或想法,指出我在正确的方向是非常感谢的!
更新时间:21/8下午11:44
我为类名创建了一个变量。现在的错误是
...line 28, in <module>
for article in articles:
TypeError: 'WebElement' object is not iterable
更新12:12am 22/8
我对最近的海报进行了修改,并修改了一些代码。我现在遇到的唯一错误是与键盘输入或键的使用有关。它是一个属性错误:“list”对象没有属性“send_keys”
我的代码是
search_button = driver.find_elements_by_id("icon-search")
search = driver.find_elements_by_name("q")
search.send_keys('facebook')
search.send_keys(Keys.RETURN)
要获取所有头文本,请诱导WebDriverWait
()并等待Visibility_OF_ALL_Elements_Location
()和后面的css选择器。
driver.get("https://www.theverge.com/")
headerelements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"div.c-entry-box--compact__body>h2>a")))
for head in headerelements:
print(head.text)
控制台输出:
BRYDGE’S LATEST KEYBOARDS TURN A SURFACE PRO OR GO INTO A STANDARD LAPTOP
Ikea gives its 2021 catalog an Animal Crossing-themed makeover in Taiwan
School nurses are on the frontlines of the pandemic
AN INNOCENT TYPO LED TO A GIANT 212-STORY OBELISK IN MICROSOFT FLIGHT SIMULATOR
The epic campaign to win Elon Musk’s Tesla factory with memes
NASA is going to try to hunt down a leak on the International Space Station this weekend
What’s the best student laptop? We asked students
Goodbye to Patriot Act, a comedy show that was a different kind of angry
How to pick the right headphones for kids
Swipe left, Elon stans: that Tesla dating app is a joke, for now
Leaked Google Pixel 5 renders show dual rear camera and fingerprint sensor
Minecraft Education is perfectly suited for this surreal back-to-school moment
What we listen to while working from home
Samsung’s Galaxy S20 is receiving Note 20 features with new One UI update
Facebook’s old web design will disappear in September
Apple reportedly using cheaper iPhone battery parts to offset 5G cost
THE VERGE’S BACK TO SCHOOL SPECIAL
Epic to host a #FreeFortnite tournament with anti-Apple prizes
After inking a deal with Netflix, Trump impersonator Sarah Cooper is also getting a TV show
Magic Leap’s lost work The Last Light gets a surprise release after its developers were laid off
Android 11 phones will summon Android Auto wirelessly, no need to pull out your device
HOW FORTNITE’S EPIC BATTLE WITH APPLE COULD RESHAPE THE ANTITRUST FIGHT
Adobe accidentally deleted people’s photos in latest Lightroom update
Major news publishers ask Apple what can get them an App Store deal like Amazon’s
Tesla is working on a sensor that can detect a child left behind in a hot car
Fertility app Premom reportedly shared customer data with Chinese companies
Mark Zuckerberg testified before the FTC as part of its Facebook antitrust probe
How to get Microsoft’s xCloud and stream Xbox games on your phone right now
Where to sit on the school bus just got a lot more complicated
Former Uber security chief charged with paying hush money to cover up 2016 hack
Google confirms Android 11 will limit third-party camera apps because of location spying fears
Uber and Lyft shutdown in California averted as judge grants emergency stay
Netflix is re-creating iconic Stranger Things sets in LA, and you can drive your car through them
Google’s Pixel Buds are now available in more colors nearly four months after launch
Airbnb puts global ban on house parties to support social distancing guidelines
HOUSES ARE INFLUENCERS NOW, AND THIS ONE BURNED TO THE GROUND
Lyft will suspend its ride-hailing service in California
Reddit reports 18 percent reduction in hateful content after banning nearly 7,000 subreddits
A mail-in COVID-19 test company switched to FedEx because of USPS delays
Steve Bannon charged with fraud over crowdfunded border wall
Razer gets into the ergonomic game with its new $99.99 Pro Click wireless mouse
SAMSUNG GALAXY NOTE 20 ULTRA REVIEW: BIG PHONE, SMALL UPDATES
Google’s Pixel Buds get new transcribe mode, attention alerts, and sharing detection
Control’s publisher explains why it won’t offer a free next-gen upgrade
SpaceX still pressing ahead with its Air Force lawsuit, despite winning coveted Air Force contract
We're building great things, and we need your talent.
DoorDash launches grocery delivery to compete with Amazon and Instacart
对于您的脚本,存在问题articles=main.find_element_by_class_name(“C-entry-box--compact__title”)
FIND_ELEMENT_BY_CLASS_NAME()
将返回单个WEBELEMENT。要获取元素列表,需要使用find_elements_by_class_name()
因此它应该是
articles=main.find_elements_by_class_name(“C-entry-box--compact__title”)
然而,我建议使用我的方法,这是非常线性的。