mirror of
https://github.com/benbusby/whoogle-search
synced 2024-11-18 09:25:33 +00:00
65796fd1a5
Google updated their styling of the result page, which broke some components of Whoogle's result page styling (namely the result div backgrounds for dark mode). The GClasses class has been updated to keep track of what class names have been updated to, and roll them back to a value that works for Whoogle. A function was added that loops through new class names and replaces them with their older counterparts.
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from bs4 import BeautifulSoup
|
|
|
|
|
|
class GClasses:
|
|
"""A class for tracking obfuscated class names used in Google results that
|
|
are directly referenced in Whoogle's filtering code.
|
|
|
|
Note: Using these should be a last resort. It is always preferred to filter
|
|
results using structural cues instead of referencing class names, as these
|
|
are liable to change at any moment.
|
|
"""
|
|
main_tbm_tab = 'KP7LCb'
|
|
images_tbm_tab = 'n692Zd'
|
|
footer = 'TuS8Ad'
|
|
result_class_a = 'ZINbbc'
|
|
result_class_b = 'luh4td'
|
|
|
|
result_classes = {
|
|
result_class_a: ['Gx5Zad'],
|
|
result_class_b: ['fP1Qef']
|
|
}
|
|
|
|
@classmethod
|
|
def replace_css_classes(cls, soup: BeautifulSoup) -> BeautifulSoup:
|
|
"""Replace updated Google classes with the original class names that
|
|
Whoogle relies on for styling.
|
|
|
|
Args:
|
|
soup: The result page as a BeautifulSoup object
|
|
|
|
Returns:
|
|
BeautifulSoup: The new BeautifulSoup
|
|
"""
|
|
result_divs = soup.find_all('div', {
|
|
'class': [_ for c in cls.result_classes.values() for _ in c]
|
|
})
|
|
|
|
for div in result_divs:
|
|
new_class = ' '.join(div['class'])
|
|
for key, val in cls.result_classes.items():
|
|
new_class = ' '.join(new_class.replace(_, key) for _ in val)
|
|
div['class'] = new_class.split(' ')
|
|
return soup
|
|
|
|
def __str__(self):
|
|
return self.value
|