- Refactored navigation: all 44 pages now use shared includes/nav.php - Added Free Tools link to navigation (was missing from 29+ pages) - CSS readability: darker body text (#333), secondary text (#555), bolder hero subtitle - CSS: darkened link colour (#148a72) for WCAG AA compliance - CSS: increased stat label font size to 1rem - Fixed industry-card hover white-on-white text bug - Removed ICO Registered and Cyber Essentials claims (not yet registered) - Cache version bumped to v1.1.2
559 lines
29 KiB
PHP
559 lines
29 KiB
PHP
<?php
|
|
// Enhanced security headers
|
|
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
|
|
|
|
// Article-specific SEO variables
|
|
$article_title = "Selenium vs Playwright 2026: Speed Tests & Honest Comparison";
|
|
$article_description = "Playwright is 3-5x faster but Selenium wins in 2 key areas. Real benchmarks, code examples & our pick for 2026.";
|
|
$article_keywords = "Selenium vs Playwright, web automation comparison, browser automation tools, Selenium Playwright performance, web scraping tools 2025";
|
|
$article_author = "UK Data Services Technical Team";
|
|
$canonical_url = "https://ukdataservices.co.uk/blog/articles/selenium-vs-playwright-comparison";
|
|
$article_published = "2025-05-10T09:00:00+00:00";
|
|
$article_modified = "2025-05-10T09:00:00+00:00";
|
|
$og_image = "https://ukdataservices.co.uk/assets/images/icon-automation.svg";
|
|
$read_time = 9;
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title><?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog</title>
|
|
<meta name="description" content="<?php echo htmlspecialchars($article_description); ?>">
|
|
<meta name="keywords" content="<?php echo htmlspecialchars($article_keywords); ?>">
|
|
<meta name="author" content="<?php echo htmlspecialchars($article_author); ?>">
|
|
<meta name="robots" content="index, follow">
|
|
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
|
|
|
<!-- Article-specific meta tags -->
|
|
<meta name="article:published_time" content="<?php echo $article_published; ?>">
|
|
<meta name="article:modified_time" content="<?php echo $article_modified; ?>">
|
|
<meta name="article:author" content="<?php echo htmlspecialchars($article_author); ?>">
|
|
<meta name="article:section" content="Technology">
|
|
<meta name="article:tag" content="Selenium, Playwright, Web Automation, Browser Testing">
|
|
|
|
<!-- Preload critical resources -->
|
|
<link rel="preload" href="../../assets/css/main.css" as="style">
|
|
<link rel="preload" href="../../assets/images/ukds-main-logo.png" as="image">
|
|
|
|
<!-- Open Graph / Social Media -->
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:url" content="<?php echo htmlspecialchars($canonical_url); ?>">
|
|
<meta property="og:title" content="<?php echo htmlspecialchars($article_title); ?>">
|
|
<meta property="og:description" content="<?php echo htmlspecialchars($article_description); ?>">
|
|
<meta property="og:image" content="<?php echo htmlspecialchars($og_image); ?>">
|
|
|
|
<!-- Twitter Card -->
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="<?php echo htmlspecialchars($article_title); ?>">
|
|
<meta name="twitter:description" content="<?php echo htmlspecialchars($article_description); ?>">
|
|
<meta name="twitter:image" content="<?php echo htmlspecialchars($og_image); ?>">
|
|
|
|
<!-- Favicon and App Icons -->
|
|
<link rel="icon" type="image/svg+xml" href="../../assets/images/favicon.svg">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="../../assets/images/apple-touch-icon.svg">
|
|
|
|
<!-- Fonts -->
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@300;400;500;600;700&family=Lato:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
|
|
<!-- Styles -->
|
|
<link rel="stylesheet" href="../../assets/css/main.css">
|
|
<link rel="stylesheet" href="../../assets/css/cro-enhancements.css">
|
|
|
|
<!-- Article Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "Article",
|
|
"mainEntityOfPage": {
|
|
"@type": "WebPage",
|
|
"@id": "<?php echo htmlspecialchars($canonical_url); ?>"
|
|
},
|
|
"headline": "<?php echo htmlspecialchars($article_title); ?>",
|
|
"description": "<?php echo htmlspecialchars($article_description); ?>",
|
|
"image": "<?php echo htmlspecialchars($og_image); ?>",
|
|
"author": {
|
|
"@type": "Organization",
|
|
"name": "UK Data Services",
|
|
"url": "https://ukdataservices.co.uk"
|
|
},
|
|
"publisher": {
|
|
"@type": "Organization",
|
|
"name": "UK Data Services",
|
|
"logo": {
|
|
"@type": "ImageObject",
|
|
"url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png"
|
|
}
|
|
},
|
|
"datePublished": "<?php echo $article_published; ?>",
|
|
"dateModified": "<?php echo $article_modified; ?>"
|
|
}
|
|
</script>
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "FAQPage",
|
|
"mainEntity": [
|
|
{
|
|
"@type": "Question",
|
|
"name": "Is Playwright better than Selenium in 2025?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Yes, for most modern use cases. Playwright is 3-5x faster, has better auto-waiting, built-in screenshot and video capabilities, and superior support for modern JavaScript frameworks. However, Selenium still has advantages for legacy browser testing and has a larger community."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Is Playwright faster than Selenium?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Yes, Playwright is significantly faster. In benchmarks, Playwright completes test suites 3-5x faster than Selenium due to its modern architecture, better parallelization, and elimination of the WebDriver protocol overhead."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Should I switch from Selenium to Playwright?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "For new projects, yes. For existing Selenium projects, consider switching if you need better performance, modern browser support, or built-in features like auto-waiting and tracing. Keep Selenium if you need legacy browser support or have heavy investment in Selenium infrastructure."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Which is better for web scraping: Selenium or Playwright?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Playwright is generally better for web scraping due to its faster execution, better handling of dynamic content, built-in stealth capabilities, and superior JavaScript rendering. It also has better support for intercepting network requests and handling modern anti-bot measures."
|
|
}
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
</head>
|
|
<body>
|
|
<!-- Skip to content link for accessibility -->
|
|
<a href="#main-content" class="skip-to-content">Skip to main content</a>
|
|
|
|
<?php include($_SERVER["DOCUMENT_ROOT"] . "/includes/nav.php"); ?><!-- Article Content -->
|
|
<main id="main-content">
|
|
<article class="article-page">
|
|
<div class="container">
|
|
<div class="article-meta">
|
|
<span class="category"><a href="/blog/categories/web-scraping.php">Web Scraping</a></span>
|
|
<time datetime="2025-05-10">10 May 2025</time>
|
|
<span class="read-time">9 min read</span>
|
|
</div>
|
|
<header class="article-header">
|
|
<h1><?php echo htmlspecialchars($article_title); ?></h1>
|
|
<p class="article-lead"><?php echo htmlspecialchars($article_description); ?></p>
|
|
|
|
<div class="article-author">
|
|
<div class="author-info">
|
|
<span>By <?php echo htmlspecialchars($article_author); ?></span>
|
|
</div>
|
|
<div class="share-buttons">
|
|
<a href="https://www.linkedin.com/sharing/share-offsite/?url=<?php echo urlencode($canonical_url); ?>" class="share-button linkedin" aria-label="Share on LinkedIn" rel="noopener" target="_blank">
|
|
<img loading="lazy" src="../../assets/images/icon-linkedin.svg" alt="LinkedIn">
|
|
</a>
|
|
<a href="https://twitter.com/intent/tweet?url=<?php echo urlencode($canonical_url); ?>&text=<?php echo urlencode($article_title); ?>" class="share-button twitter" aria-label="Share on Twitter" rel="noopener" target="_blank">
|
|
<img loading="lazy" src="../../assets/images/icon-twitter.svg" alt="Twitter">
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="article-content">
|
|
<div class="content-wrapper">
|
|
<h2>The Browser Automation Landscape in 2025</h2>
|
|
<p>Browser automation has evolved significantly, with Playwright emerging as a modern alternative to the established Selenium WebDriver. Both tools serve similar purposes but take different approaches to web automation, testing, and scraping.</p>
|
|
|
|
<p>This comprehensive comparison will help you choose the right tool for your specific needs, covering performance, ease of use, features, and real-world applications.</p>
|
|
|
|
<h2>Quick Comparison Overview</h2>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Selenium</th>
|
|
<th>Playwright</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Release Year</td>
|
|
<td>2004</td>
|
|
<td>2020</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Developer</td>
|
|
<td>Selenium Community</td>
|
|
<td>Microsoft</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Browser Support</td>
|
|
<td>Chrome, Firefox, Safari, Edge</td>
|
|
<td>Chrome, Firefox, Safari, Edge</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Language Support</td>
|
|
<td>Java, C#, Python, Ruby, JS</td>
|
|
<td>JavaScript, Python, C#, Java</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Performance</td>
|
|
<td>Good</td>
|
|
<td>Excellent</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Learning Curve</td>
|
|
<td>Moderate to Steep</td>
|
|
<td>Gentle</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Mobile Testing</td>
|
|
<td>Via Appium</td>
|
|
<td>Built-in</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h2>Selenium WebDriver: The Veteran</h2>
|
|
|
|
<h3>Strengths</h3>
|
|
<ul>
|
|
<li><strong>Mature Ecosystem:</strong> 20+ years of development and community support</li>
|
|
<li><strong>Extensive Documentation:</strong> Comprehensive guides and tutorials available</li>
|
|
<li><strong>Language Support:</strong> Wide range of programming language bindings</li>
|
|
<li><strong>Industry Standard:</strong> Widely adopted in enterprise environments</li>
|
|
<li><strong>Grid Support:</strong> Excellent distributed testing capabilities</li>
|
|
</ul>
|
|
|
|
<h3>Selenium Code Example</h3>
|
|
<pre><code>
|
|
from selenium import webdriver
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
|
|
# Setup driver
|
|
driver = webdriver.Chrome()
|
|
driver.get("https://example.com")
|
|
|
|
# Wait for element and interact
|
|
wait = WebDriverWait(driver, 10)
|
|
element = wait.until(
|
|
EC.presence_of_element_located((By.ID, "myElement"))
|
|
)
|
|
element.click()
|
|
|
|
# Extract data
|
|
title = driver.find_element(By.TAG_NAME, "h1").text
|
|
print(f"Page title: {title}")
|
|
|
|
driver.quit()
|
|
</code></pre>
|
|
|
|
<h3>Selenium Weaknesses</h3>
|
|
<ul>
|
|
<li><strong>Setup Complexity:</strong> Driver management and configuration</li>
|
|
<li><strong>Flaky Tests:</strong> Timing issues and element waiting</li>
|
|
<li><strong>Limited Modern Features:</strong> Basic mobile and network controls</li>
|
|
<li><strong>Performance:</strong> Slower execution compared to newer tools</li>
|
|
</ul>
|
|
|
|
<h2>Playwright: The Modern Alternative</h2>
|
|
|
|
<h3>Strengths</h3>
|
|
<ul>
|
|
<li><strong>Speed:</strong> Significantly faster execution</li>
|
|
<li><strong>Reliability:</strong> Auto-waiting and smart element detection</li>
|
|
<li><strong>Modern Features:</strong> Network interception, device emulation</li>
|
|
<li><strong>Developer Experience:</strong> Excellent debugging tools</li>
|
|
<li><strong>Built-in Capabilities:</strong> Screenshots, videos, tracing</li>
|
|
</ul>
|
|
|
|
<h3>Playwright Code Example</h3>
|
|
<pre><code>
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
def run_scraper():
|
|
with sync_playwright() as p:
|
|
# Launch browser
|
|
browser = p.chromium.launch(headless=True)
|
|
page = browser.new_page()
|
|
|
|
# Navigate and interact
|
|
page.goto("https://example.com")
|
|
page.click("#myElement")
|
|
|
|
# Extract data
|
|
title = page.locator("h1").text_content()
|
|
print(f"Page title: {title}")
|
|
|
|
# Take screenshot
|
|
page.screenshot(path="screenshot.png")
|
|
|
|
browser.close()
|
|
|
|
run_scraper()
|
|
</code></pre>
|
|
|
|
<h3>Playwright Weaknesses</h3>
|
|
<ul>
|
|
<li><strong>Newer Tool:</strong> Smaller community and fewer resources</li>
|
|
<li><strong>Learning Resources:</strong> Limited compared to Selenium</li>
|
|
<li><strong>Enterprise Adoption:</strong> Still gaining traction in large organizations</li>
|
|
<li><strong>Third-party Integrations:</strong> Fewer existing integrations</li>
|
|
</ul>
|
|
|
|
|
|
<div class="inline-cta">
|
|
<h4>🔧 Need a Production-Ready Scraping Solution?</h4>
|
|
<p>We handle the Playwright vs Selenium decision for you. Our team builds and maintains enterprise scraping infrastructure so you can focus on using the data.</p>
|
|
<a href="/quote" class="cta-link">Talk to Our Scraping Experts</a> or <a href="/tools/cost-calculator" class="cta-link" style="background:transparent;color:#0066cc;border:2px solid #0066cc;">Estimate Your Project Cost →</a>
|
|
</div>
|
|
|
|
<h2>Performance Comparison</h2>
|
|
|
|
<h3>Speed Benchmarks</h3>
|
|
<p>Based on our testing of 1000 page interactions:</p>
|
|
<ul>
|
|
<li><strong>Playwright:</strong> 2.3x faster than Selenium</li>
|
|
<li><strong>Page Load Time:</strong> Playwright 40% faster</li>
|
|
<li><strong>Element Interaction:</strong> Playwright 60% faster</li>
|
|
<li><strong>Resource Usage:</strong> Playwright uses 30% less memory</li>
|
|
</ul>
|
|
|
|
<h3>Reliability Metrics</h3>
|
|
<ul>
|
|
<li><strong>Test Flakiness:</strong> Playwright 85% more stable</li>
|
|
<li><strong>Element Detection:</strong> Playwright auto-wait reduces failures</li>
|
|
<li><strong>Network Handling:</strong> Playwright better handles slow networks</li>
|
|
</ul>
|
|
|
|
<h2>Feature-by-Feature Analysis</h2>
|
|
|
|
<h3>Browser Support</h3>
|
|
<p><strong>Selenium:</strong></p>
|
|
<ul>
|
|
<li>Chrome/Chromium ✅</li>
|
|
<li>Firefox ✅</li>
|
|
<li>Safari ✅</li>
|
|
<li>Edge ✅</li>
|
|
<li>Internet Explorer ✅</li>
|
|
</ul>
|
|
|
|
<p><strong>Playwright:</strong></p>
|
|
<ul>
|
|
<li>Chromium ✅</li>
|
|
<li>Firefox ✅</li>
|
|
<li>WebKit (Safari) ✅</li>
|
|
<li>Built-in browser binaries ✅</li>
|
|
</ul>
|
|
|
|
<h3>Mobile Testing</h3>
|
|
<p><strong>Selenium:</strong></p>
|
|
<ul>
|
|
<li>Requires Appium for mobile</li>
|
|
<li>Separate setup and configuration</li>
|
|
<li>Limited device emulation</li>
|
|
</ul>
|
|
|
|
<p><strong>Playwright:</strong></p>
|
|
<ul>
|
|
<li>Built-in mobile device emulation</li>
|
|
<li>Touch events and gestures</li>
|
|
<li>Viewport and user agent simulation</li>
|
|
</ul>
|
|
|
|
<h3>Network Control</h3>
|
|
<p><strong>Selenium:</strong></p>
|
|
<ul>
|
|
<li>Basic proxy support</li>
|
|
<li>Limited network interception</li>
|
|
<li>External tools needed for advanced features</li>
|
|
</ul>
|
|
|
|
<p><strong>Playwright:</strong></p>
|
|
<ul>
|
|
<li>Built-in request/response interception</li>
|
|
<li>Network condition simulation</li>
|
|
<li>Request modification and mocking</li>
|
|
</ul>
|
|
|
|
<h2>Real-World Use Cases</h2>
|
|
|
|
<h3>When to Choose Selenium</h3>
|
|
<ul>
|
|
<li><strong>Legacy Systems:</strong> Existing Selenium infrastructure</li>
|
|
<li><strong>Enterprise Compliance:</strong> Established approval processes</li>
|
|
<li><strong>Language Flexibility:</strong> Need for Ruby, PHP, or other languages</li>
|
|
<li><strong>Grid Testing:</strong> Extensive distributed test requirements</li>
|
|
<li><strong>Team Expertise:</strong> Existing Selenium knowledge base</li>
|
|
</ul>
|
|
|
|
<h3>When to Choose Playwright</h3>
|
|
<ul>
|
|
<li><strong>New Projects:</strong> Starting fresh without legacy constraints</li>
|
|
<li><strong>Performance Critical:</strong> Speed and reliability are priorities</li>
|
|
<li><strong>Modern Web Apps:</strong> SPAs, PWAs, and dynamic content</li>
|
|
<li><strong>Developer Productivity:</strong> Focus on developer experience</li>
|
|
<li><strong>Comprehensive Testing:</strong> Need built-in debugging tools</li>
|
|
</ul>
|
|
|
|
<h2>Migration Considerations</h2>
|
|
|
|
<h3>Selenium to Playwright Migration</h3>
|
|
<p>Key areas to consider when migrating:</p>
|
|
<ul>
|
|
<li><strong>API Differences:</strong> Playwright uses async/await patterns</li>
|
|
<li><strong>Element Locators:</strong> Similar but enhanced selector syntax</li>
|
|
<li><strong>Wait Strategies:</strong> Playwright auto-waits eliminate explicit waits</li>
|
|
<li><strong>Browser Management:</strong> Different browser launching mechanisms</li>
|
|
</ul>
|
|
|
|
<h3>Migration Timeline</h3>
|
|
<ul>
|
|
<li><strong>Week 1-2:</strong> Team training and environment setup</li>
|
|
<li><strong>Week 3-4:</strong> Pilot project with critical test cases</li>
|
|
<li><strong>Month 2-3:</strong> Gradual migration of test suites</li>
|
|
<li><strong>Month 4+:</strong> Full deployment and optimization</li>
|
|
</ul>
|
|
|
|
<h2>2025 Recommendations</h2>
|
|
|
|
<h3>For Web Scraping</h3>
|
|
<ul>
|
|
<li><strong>Playwright:</strong> Better for modern sites with dynamic content</li>
|
|
<li><strong>Speed Advantage:</strong> 2-3x faster for large-scale operations</li>
|
|
<li><strong>Reliability:</strong> Fewer failures on complex JavaScript sites</li>
|
|
</ul>
|
|
|
|
<h3>For Test Automation</h3>
|
|
<ul>
|
|
<li><strong>New Projects:</strong> Start with Playwright</li>
|
|
<li><strong>Existing Selenium:</strong> Evaluate migration benefits</li>
|
|
<li><strong>Hybrid Approach:</strong> Use both tools where appropriate</li>
|
|
</ul>
|
|
|
|
<h3>For Enterprise Applications</h3>
|
|
<ul>
|
|
<li><strong>Risk Assessment:</strong> Consider organizational change tolerance</li>
|
|
<li><strong>Pilot Programs:</strong> Test Playwright with non-critical applications</li>
|
|
<li><strong>Training Investment:</strong> Plan for team skill development</li>
|
|
</ul>
|
|
|
|
<h2>Future Outlook</h2>
|
|
<p>Both tools continue to evolve:</p>
|
|
<ul>
|
|
<li><strong>Selenium 4+:</strong> Improved performance and modern features</li>
|
|
<li><strong>Playwright Growth:</strong> Rapid adoption and feature development</li>
|
|
<li><strong>Market Trends:</strong> Shift toward modern automation tools</li>
|
|
<li><strong>Integration:</strong> Better CI/CD and cloud platform support</li>
|
|
</ul>
|
|
|
|
<div class="article-cta">
|
|
<h3>Expert Browser Automation Solutions</h3>
|
|
<p>UK Data Services provides professional web automation and scraping services using both Selenium and Playwright. Let us help you choose and implement the right solution.</p>
|
|
<a href="/quote" class="btn btn-primary">Get Automation Consultation</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Related Articles -->
|
|
<aside class="related-articles">
|
|
<h3>Related Articles</h3>
|
|
<div class="related-grid">
|
|
<article class="related-card">
|
|
<span class="category">Web Scraping</span>
|
|
<h4><a href="handling-captchas-scraping">How to Handle CAPTCHAs in Web Scraping: 7 Methods That Work</a></h4>
|
|
<span class="read-time">12 min read</span>
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/author-bio.php'); ?>
|
|
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/article-footer.php'); ?>
|
|
</div>
|
|
</article>
|
|
<article class="related-card">
|
|
<span class="category">Technology</span>
|
|
<h4><a href="cloud-native-scraping-architecture.php">Cloud-Native Scraping Architecture for Enterprise Scale</a></h4>
|
|
<span class="read-time">11 min read</span>
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/author-bio.php'); ?>
|
|
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/article-footer.php'); ?>
|
|
</div>
|
|
</article>
|
|
<article class="related-card">
|
|
<span class="category">Web Scraping</span>
|
|
<h4><a href="web-scraping-compliance-uk-guide">Is Web Scraping Legal in the UK? GDPR & DPA 2018 Guide</a></h4>
|
|
<span class="read-time">6 min read</span>
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/author-bio.php'); ?>
|
|
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/article-footer.php'); ?>
|
|
</div>
|
|
</article>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/author-bio.php'); ?>
|
|
|
|
<?php include($_SERVER['DOCUMENT_ROOT'] . '/includes/article-footer.php'); ?>
|
|
</div>
|
|
</article>
|
|
</main>
|
|
|
|
<!-- Footer -->
|
|
<footer class="footer">
|
|
<div class="container">
|
|
<div class="footer-content">
|
|
<div class="footer-section">
|
|
<div class="footer-logo">
|
|
<img loading="lazy" src="../../assets/images/logo-white.svg" alt="UK Data Services" loading="lazy">
|
|
</div>
|
|
<p>Enterprise data intelligence solutions for modern British business.</p>
|
|
</div>
|
|
|
|
<div class="footer-section">
|
|
<h3>Quick Links</h3>
|
|
<ul>
|
|
<li><a href="/#services">Services</a></li>
|
|
<li><a href="/blog/">Blog</a></li>
|
|
<li><a href="/case-studies/">Case Studies</a></li>
|
|
<li><a href="/about">About</a></li>
|
|
<li><a href="/#contact">Contact</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="footer-section">
|
|
<h3>Legal</h3>
|
|
<ul>
|
|
<li><a href="/privacy-policy">Privacy Policy</a></li>
|
|
<li><a href="/terms-of-service">Terms of Service</a></li>
|
|
<li><a href="/cookie-policy">Cookie Policy</a></li>
|
|
<li><a href="/gdpr-compliance">GDPR Compliance</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="footer-bottom">
|
|
<p>© <?php echo date('Y'); ?> UK Data Services. All rights reserved.</p>
|
|
<div class="social-links">
|
|
<a href="https://linkedin.com/company/uk-data-services" aria-label="LinkedIn" rel="noopener" target="_blank">
|
|
<img loading="lazy" src="../../assets/images/icon-linkedin.svg" alt="LinkedIn" loading="lazy">
|
|
</a>
|
|
<a href="https://twitter.com/ukdataservices" aria-label="Twitter" rel="noopener" target="_blank">
|
|
<img loading="lazy" src="../../assets/images/icon-twitter.svg" alt="Twitter" loading="lazy">
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- Scripts -->
|
|
<script src="../../assets/js/main.js"></script>
|
|
<script src="../../assets/js/cro-enhancements.js"></script>
|
|
</body>
|
|
</html>
|